2010년 7월 11일 일요일

와이어샤크에서 깨져보이는 '한글', 이거 무슨 뜻이지?

와이어샤크를 통해 패킷 분석을 하는 경우, 아래와 같이 문자열이 <xx> 로 보이는 경우가 있다. 문자열로 추측이 되는데 무엇일까? 한글이 이렇게 표현되는 경우가 있다.  왜 와이어샤크에서 한글이 깨져보일까?
와이어샤크에서는 한글 컨버전이 제대로 안돼 한글을 windows-1252 코드로 표현한 것이다. 참고로 영어와 서방 언어 윈도우에서 기본으로 사용되는 코드페이지이다.


가끔 이렇게 표현되는 한글이 무엇일까? 필요한 경우가 있다. 간단한 것은 우리가 알아볼 수 있도록 컨버전을 하는 것이다. 다양한 방법을 통해서 할 수 있겠는데, 일단 필자는 다음과 같이 파이썬을 통해 해 보았다.

x 변수에 각 값을 넣어주고, 디코드를 EUC_KR 로 해 보았다.

>>> x = "\xb0\xe6\xbf\xb5\xc1\xf6\xbf\xf8\xc6\xc0"
>>> print x.decode("euc_kr")
경영지원팀
>>>

그러면 짠 하고 의미가 나타난다. 넷바이오스 관련한 것을 보다보면 이러한 이름뒤에 <00>, <1b>, <20>, <1c> 를 볼 수 있다.  예를 들면 ,  TEST<00>, 홍길동<1C> 와 같은 것들이다. 위에서도 마찬가지로 이름에서 젤 마지막에 붙은 <00> 은 실제 이름이 아니고 다른 의미이므로 그것은 떼어내고 변환해야 한다.

이렇게 변환외에도 알수 있는 방법은 출발지 IP 를 보고 nbtstat 명령어를 통해 보는 것이다.

C:\>nbtstat -A 192.168.x.x
Local Area Connection:
Node IpAddress: [192.168.x.x] Scope Id: []

           NetBIOS Remote Machine Name Table

       Name               Type         Status
    ---------------------------------------------
    TEST12          <00>  UNIQUE      Registered
    경영지원팀     <00>  GROUP       Registered

    MAC Address = 00-19-B9-XX-XX-XX

단, 같은 네트워크 라면 모르지만 원격의 경우는 여러 제약이 있으므로 패킷만 전달받은 상태에서는 이렇게 알기 힘드므로 직접 변환 작업등이 필요하다.

아래 도표는 NetBios 의 Number 를 정리한 도표이다.

NameNumberTypeUsage
<computername>00UWorkstation Service
<computername>01UMessenger Service
<''_MSBROWSE_>01GMaster Browser
<computername>03UMessenger Service
<computername>06URAS Server Service
<computername>1FUNetDDE Service
<computername>20UFile Server Service
<computername>21URAS Client Service
<computername>22UExchange Interchange
<computername>23UExchange Store
<computername>24UExchange Directory
<computername>30UModem Sharing Server Service
<computername>31UModem Sharing Client Service
<computername>43USMS Client Remote Control
<computername>44USMS Admin Remote Control Tool
<computername>45USMS Client Remote Chat
<computername>46USMS Client Remote Transfer
<computername>4CUDEC Pathworks TCPIP Service
<computername>52UDEC Pathworks TCPIP Service
<computername>87UExchange MTA
<computername>6AUExchange IMC
<computername>BEUNetwork Monitor Agent
<computername>BFUNetwork Monitor Apps
<username>03UMessenger Service
<domain>00GDomain Name
<domain>1BUDomain Master Browser
<domain>1CGDomain Controllers
<domain>1DUMaster Browser
<domain>1EGBrowser Service Elections
<INet~Services>1CGInternet Information Server
<IS~Computer_name>00UInternet Information Server
<computername>[2B]ULotus Notes Server
IRISMULTICAST[2F]GLotus Notes
IRISNAMESERVER[33]GLotus Notes
Forte_$ND800ZA[20]UDCA Irmalan Gateway Service

또 다른 예제를 보자. 아래는 LLMNR 프로토콜에서 이름 쿼리를 한 것인데. 위에서 본것과 같이 <xx> 로 표현된 것이 아니라 \xxx\xxx 와 같이 표현되었다. 이건 또 무엇일까? 이 값은 OCT 로 표현된 것이다. 즉, 네트워크 패킷을 덤프할때 시스템 언어의 영향을 받아 덤프할때 언어 표현이 달라진 것이다.


자, 이것은 아래와 같이 변환을 해보자. (참고로 파이썬은 윈도우에서도 사용이 가능하다)
Query 값을 복사할때는 Detail 창에서 해당 값 위에서 오른쪽 클릭을 하면 Copy->Value 를 통해 쉽게
복사가 가능하다는 것을 잊지말자!

# python
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = "\355\231\215\352\270\270\353\217\231"
>>> type(x)
<type 'str'>
>>> print x.decode('utf-8')
홍길동
>>>

내용을 utf-8 로 디코드 해 보았더니 홍길동 이라는 이름이 나온다.  자, 필요한 경우 한글로 변환해서
패킷 분석에 도움이 될만한 정보를 얻어보도록 하자!


[참고]
1. Windows-1252

댓글 1개:

  1. trackback from: Python - SFTP, FTP 파일 업로드
    # -*- coding:utf-8 -*- # http://ysksoft.com(skyoon) import ftplib import paramiko from socket import * class LibFTP: def __init__(self, ftp_host, ftp_port, ftp_mode=''): if ftp_mode == 'ssl': self._ftp = LibFTPSSL(ftp_host, ftp_port) else: self._ftp = L..

    답글삭제