기타-유틸리티

패킷분석방법

MiPlatform 및 XPLATFORM으로 시스템 구축 후 응답속도가 늦거나 응답이 없는 경우, 
또는 네트워크/서버 구간에서 보내 주는 데이터가 비정상적인 경우 각종 툴을 이용하여 
패킷 내용을 분석하여 원인을 찾는데 도움이 되도록 하기 위함입니다.

아래 제품정보의 내용은 사이트 변경에 따라 변경될 수 있음을 알려드립니다.

패킷 분석 툴

Http Analyze

Http Analyze

A) 각 파일 또는 서비스에 대한 응답시간 정보를 확인 가능 합니다. 대기 시간이 오래 걸릴 경우 실제 Client 요청 후 응답까지의 시간을 확인 할 수 있습니다. (Duration)
B) HTTP Status Code값을 확인 할 수 있습니다.(Result)
C) Request 데이터와 Response 데이터값을 확인 할 수 있습니다.(Stream)
D) 사례 :
- 화면 요청 후 완료 까지의 응답 시간이 오래 걸릴 경우 Duration을 확인하여 전체 응답시간이 왜 오래 걸리는 지 분석이 가능합니다.
- 특정 데이터 또는 화면이 오픈 되지 않은 경우 Result 값을 보고 문제가 되는 곳이 없는 지 확인 이 가능합니다.
- 정상적으로 200 Return이 되었으나 데이터가 나오지 않는 경우 Stream데이터를 보고 원인을 추측 할 수 있습니다. 다만, 압축통신 구간 암호화를 사용 할 경우 이를 보고 판단 할 수는 없습니다.

Fiddler

Fiddler

A) 각 파일 또는 서비스에 대한 응답시간 정보를 확인 가능 합니다. 대기 시간이 오래 걸릴 경우 실제 Client 요청 후 응답까지의 시간을 확인 할 수 있습니다. (Timeline)
B) HTTP Status Code값을 확인 할 수 있습니다.(Result)
C) Request 데이터와 Response 데이터값을 확인 할 수 있습니다.(Inspectors)

WireShark

1) Capture Options 클릭

wireShark

2) Interface에 사용중인 Local Lan card가 맞는 지 확인 (맞지 않을 경우 Packet 안나옴)
3) Buffer size를 적당히 지정 ( 기본 1MB이므로 100MB 정도로 설정)
4) Capture Filter에 “tcp” 입력
   destination host ip (서버 ip) 를 아신다면 tcp 대신 host xxx.xxx.xxx.xxx 로 지정하면 해당 패킷만 쌓이므로 권장드립니다.
   서버 ip를 모르신다면 tcp로 입력 후 서비스 호출하면 해당 
   ip가 로그로 남으니 참고 하시면 됩니다.
5) 하단 Start 옵션 클릭
6) 이후 MiPlatform/XPLATFORM 구동 후 서비스를 호출하면 패킷 정보가 쌓이며, 정상적일 경우 바로 확인 가능 합니다.

wireshark2

7) 오류 발생 시 오류가 완전히 종료 이후에 (오류 중간에 멈추지 마십시오) 상단 아이콘(빨간 x 아이콘)으로 중지 시킨 후   파일 저장 (메뉴의 File- SaveAs -> 파일 형식은 변경하시 마십시오 - 기본 pcap,cap임)

* 패킷을 수집하여 TOBESOFT에 전달 시 문제 사항의 대략적인 시분초 정보를 보내 주셔야 합니다.
* 패킷 정보는 여러가지 케이스가 있을 수 있으므로 5개 내외로 수집하여 주셔야 합니다.

Packetyzer

1) 메뉴의 New Capture선택시 Capture Option이 나옵니다.
2) Adaptor에 해당 LanCard를 선택합니다.

packetyzer

* Limit total capture to에 적당한 사이즈로 지정합니다.
  (PC에 걸어 놓고 수집하는 경우 Over될 수 있으므로 크게 잡습니다)
* Captur Filter에서 옵션을 지정하여 특정 ip만 처리 할 수 있습니다.
3) Start 버튼을 실행하고 문제가 발생 할 경우 완전히 종료 된 후 Stop버튼을 실행 합니다.

사례

네트워크 구간응답이 없어 retry후 종료

ex1

일반 웹페이지호출 시 불안정한 네트워크로 인한 응답 오류 다수 발생

ex2

SSO 연동 사례

㈜투비소프트에서 재공하는 UI 플랫폼인 MiPlatform 및 XPLATFORM으로 시스템 구축 시 자주 사용되었던 SSO연동 사례를 기술하였으며, 해당 사례는 특정사이트에 국한된 내용일 수 있으므로 참고사항으로 사용하시기 바랍니다.

SSO 연동 이유

SSO연동 제품

CA SiteMinder

Siteminder 제품에서도 여러가지 기능을 재공하고 있으며, Client ActiveX를 이용하여 패킷 후킹을 통한 처리도 있으나, 본 예제는 사이트에서 주로 사용하는 서버 인증 방식에 대한 사용 예제 입니다. 
처리 방법에는 여러가지가 있을 수 있으나 전체 흐름을 파악 하는데 도움이 되길 바랍니다.

ca_siteminder

SiteMinder 웹에이전트가 웹서버에서 구동이 되어 요청되는 서비스에 대한 인증 점검을 처리하게 됩니다. 
따라서, 인증되지 않은 요청에 대하여서는 해당 Agent에서 요청을 중단하며, 지정된 페이지로 리다이렉션 됩니다. 

지정된 페이지는 일반적으로 웹페이지의 로그인 화면이 될 것입니다.

1) 인증 받은 웹 페이지에서 MiPlatform 으로쿠키 정보 전달 예(전용브라우즈).

String strSessionValue = "";
Enumeration enames = request.getHeaderNames(); 
try
{
    while(enames.hasMoreElements()) {
         String name = (String) enames.nextElement();
        if(name.toUpperCase().equals("SMSESSION"))
        {
 strSessionValue = request.getHeader(name);
        }
…..
updater.GlobalVal = “<%= strSessionValue %>”;  // MiPlatform
XPLauncher.globalvalue = "SMSESSION:s=” + “<%= strSessionValue %>” //XPLATFORM

2) MiPlatform 초기 화면에서 이미 인증된 세션 값 적용

SMSESSION = GetReg(“GlobalVal”);
* SMSESSION 변수는 Global 변수 영역에 Cookie 변수로 미리 선언을 하셔야 합니다.

3) 인증 된 페이지에서 사용자 정보 취득 방법 예
String value =request.getHeader("sm_user");
* 위 예는 사이트별 내용이 다를 수 있으며, 사용자정보를 획득하거나 인증된
사용자를 비교할 때 사용할 수 있습니다.

4) MiPlatform/XPLATFORM 로그인 페이지에서 SSO 인증 방법
   (웹브라우즈 컨트롤을 사용하거나 서비스로 구현)

ca_siteminder1

- SSO 담당자와 협의 하여 특정 서비스를 호출하고 해당 서비스는unprotection처리하도록 함.
- 해당 서비스에서 SSO서버로 페이지를 넘기고 다시 결과 값을 받도록 처리.
* 웹브라우즈를 사용한 예)
a) unprotect 영역의 page – 예)ssologin.jsp
<body>
 <form name="frm_sso" method="post" action="" target="_self">
     <input type="hidden" name="USER">
     <input type="hidden" name="PASSWORD">
     <input type="hidden" name="TARGET">
 </form>
b) protect 영역의 page – 예) getsession.jsp
<%
    String strSessionValue = "";
    Enumeration enames = request.getHeaderNames(); 
    try
    {
        while(enames.hasMoreElements()) {
           String name = (String) enames.nextElement();
           if(name.toUpperCase().equals("SMSESSION"))
           {
 strSessionValue = request.getHeader(name);
           }
        }
     }
%>
<html><head></head>
<body>
  <form name="frm_sso" method="post" action="" target="_self">
       <input type="hidden" name="SMSESSION" value="<%=strSessionValue%>">
  </form>
</body>
</html>

c) MiPlatform /XPLATFORM 화면에서 처리

//페이지 호출
var strUrl = strTestUrl + "ssologin.jsp";
MSIE1.Navigate(strUrl);
MS IE Event 처리
if URL이 ssologin.jsp인 경우
{
    var webForm = MSIE1.Document.forms.namedItem("frm_sso");   
    webForm.elements.namedItem("USER").value = Edit00.Text;
    webForm.elements.namedItem("PASSWORD").value = Edit0.Text;
    webForm.elements.namedItem("TARGET").value = strTestUrl + "getsession.jsp";
    webForm.action = "http://xx.xx.xx/siteminderagent/forms/login.fcc";
    webForm.submit();
} else if URL이 getsession.jsp 인 경우
    var webForm = MSIE1.Document.forms.namedItem("frm_sso");   
    SMSESSION = webForm.elements.namedItem("SSOSESSION").value;
}

5) 인증 받은 MiPlatform/XPLATFORM 에서인증받은 웹브라우즈 구동

ca_siteminder2

- MiPlatform / XPLATFORM페이지에 MS IE ActiveX 사용
- MS IE 페이지에서 쿠키값을 전달하고 호출 페이지를 넘김(SSO측과 협의)
var strHeader = "Cookie : SMSESSION=" + SMSESSION + "; domain=" + strDomain + "; \n";
var strURL = strTestUrl + “relay.html”;
AxMSIE0.Navigate(strURL,"false","","",strHeader);
//MS IE event
var webForm = AxMSIE0.Document.forms.namedItem("frm_sso");     // Form을 찾음.
webForm.elements.namedItem("ssosession").value = SMSESSION; 
var strPotalUrl = “”;  // 도메인
webForm.elements.namedItem("ssotarget").value = f_WebLinkPage; 
webForm.action = strPotalUrl + webForm.action;
webForm.submit();

- relay.html 예제 (동일 도메인에서 처리 하여야 함)

<form name="frm_sso" method="post" action="/sso/login/makesessionhub.jsp" target="_blank">
    <input type="hidden" name="ssosession">
    <input type="hidden" name="ssotarget">
</form>

Oracle SSO

1. 인증 받은 웹 페이지에서 MiPlatform 으로쿠키 정보 전달 예(전용브라우즈).
String ObSSOCookie = "";
Cookie cookies[] = request.getCookies();
if( cookies != null && cookies.length > 0 ) {
    Cookie cookie = null;
    for( int i = 0; i < cookies.length; i++) {
        cookie = cookies[i];
        if( cookie.getName().equals("ObSSOCookie")) {
            ObSSOCookie = cookie.getValue();

updater.GlobalVal = “<%= ObSSOCookie %>”;  // MiPlatform
XPLauncher.globalvalue = "ObSSOCookie:s=” + “<%= ObSSOCookie %>” //XPLATFORM
2. MiPlatform 초기 화면에서 이미 인증된 세션 값 적용
ObSSOCookie = GetReg(“GlobalVal”);

ObSSOCookie 변수는 Global 변수 영역에 Cookie 변수로 미리 선언을 하셔야 합니다.

3. MiPlatform/XPLATFORM 초기화면에서 인증 받기
- SSO 측과 협의하여야 하며, 지정된 서비스를 호출하여 쿠키값을 전달 받도록 해야 합니다.
- Transaction을 사용하여 호출하거나 MS IE ActiveX를 사용하여 처리하도록합니다.
4. 인증받은 MiPlatform/XPLATFORM에서인증받은 웹페이지 호출
Var param = “ObSSOCookie=” + ObSSOCookie +”&url=” + strUrl;
ExecBrowser(http://xxx.co.kr/sso/setCookieSSO.jsp? ”+ param); // MiPlatform
system.execBrowser((http://xxx.co.kr/sso/setCookieSSO.jsp? ”+ param); //XPLATFORM
String obsCookie = request.getParameter(“ObSSOCookie”);
String url = request.getParameter(“url”);
Cookie theCookie = new Cookie ("ObSSOCookie", obsCookie);
response.addCookie(theCookie);
해당 url 호출

기타사례

- 삼성 SSO
- INITECT SSO
- NETS SSO
- GENICS SSO등

SSO TimeOut 이벤트 처리 방안

1) MiPlatform http event 처리 예

httpEvent

- http OnError 이벤트 선언

httpOnerror

- Global Script 에서 정해진 값을 체크하여 종료

2) XPLATFORM onerror event 처리 예

application_onerror

- xadl 의 onerror event에서 처리
* Global 변수를 두고 값을 담고 Transaction 공통 CallBack에서 처리
권장 예) 
GV_ERRORCODE = e.statuscode;
GV_ERRORMSG = e.errormsg;
function gfn_callBack(srvid,nErrorCode,nErrorMsg)
{
  if(G_ERRORCODE ….
}

참고

- Client ActiveX, Applet등으로 구성되거나 다양한 형태의 SSO가 존재 하며, SSO 업무 담당자와 협의 하여 각 처리 요건에 따른 처리를 하여야 합니다.
- 일반적으로 위 처리 방법과 크게 차이가 없으며, SSO 정책에 따른 요건 정의가 필요합니다.
- SSO 쿠키 정보는 Http Header정보에 담기므로 Fiddler등 패킷 분석툴을 이용하여 확인 가능합니다.

ActiveX형태 모듈을 UXStudio 및 PID에서 직접 목록에서 찾아서 쓸 수 없는 경우 참고자료

본 내용은 ActiveX 모듈임에도 PID에서 목록에서 찾을 수 없는 경우에 대한 설명 및 대체 방법에 대해 기술합니다.

ActiveX 파일 확인하는 방법

가장 정확하고 간편한 방법은 Denpendency Warker(depends.exe)를 통하여 확인하는 방법입니다

depends.exe (별도 제공해 드리지 않으며, 직접 구하셔합니다.

그럼 지금부터 DSFileCipher2.dll 모듈을 예를 들어 설명하겠습니다.
(해당 모듈은 문서보안 관련 모듈인 것으로 보입니다.)

activex1

DllCanUnloadNow, DllGetClassObject, DllRegisterServer, DllUnregisterServer

이런 함수가 존재하면 그 모듈은 MS에서 규정한 ActiveX 모듈입니다

regsvr32.exe를 통하여 등록한 후 레지스트리 상태 확인

regsvr32를 통하여 DSFileCipher2.dll를등록합니다.

activex2

위이 그림처럼 레지스트리가 정상적으로 등록 후 레지스트리

activex3

레지스트리가 정상적으로 등록 되었네요. ProgID가 보입니다

PID 및 UXStudio에서 등록된 DSFileCipher2.dll 을 확인

PID –Project Manager에서 Components 추가 후 ActiveX 추가

activex4

ProgID를순서대로 정렬한 화면인데 해당 목록에 레지스트리에서 확인한 DSFileCipher2.DSFileCipher.1 을찾을 수가 없음

VB, VC,ActiveX TestContainer에서도 확인

activex5

역시 DSFileCipher2.DSFileCipher.1을 확인할 수 없습니다.

VC ActiveX Control 확인

activex6

VC에서도 DSFileCipher2.DSFileCipher.1 나오지 않는 것을 확인 할 수 있습니다.

요약

PID에 목록에 나오는 경우와 나오지 않는 경우의 비교방법

그럼 왜 ActiveX 목록에 나오지 않는지 알아 볼까요?
먼저 목록에서 잘 나오는 ActiveX와 비교해봅시다
현재 많이 사용되는 흔하게 알고 있는 Adobe PDF Reader과 비교해 보겠습니다

activex7

위와 같이 목록이 정상적으로 보이는 것을 확인할 수 있습니다.

레지스트리 등록되어 있는 Adobe PDF Reader 정보확인

activex8

레지스트에 등록된 내용을 보니 Control이라는 항목이 별도로 존재 하는 것을 확인할 수 있습니다.

activex9

목록에 보이지 않는 ActiveX는 Control이 없습니다.

ActiveX 형태의 모듈이지만 레지스트리에 등록될 때 Control 항목이 없으면 activeX control 목록에 표시 되지 않는다 이는 모듈 개발자가 Control항목을 생성하지 않았기 때문입니다.

PID목록에 나오지 않는 ActiveX 사용방법

지정된 ProgID를 가지는 COM객체를 생성하는 Method입니다.
예)
var xslfile = "C:\\test.xml";
var objDom = CreateObject("Microsoft.XMLDOM"); 
objDom.async = false;
objDom.Load(xslfile);
trace(objDom.xml);

사용법 및 메소드에 대해서는 모듈제공업체를 통해 전달받을 수 있을것으로 봅니다.