레이블이 트래픽인 게시물을 표시합니다. 모든 게시물 표시
레이블이 트래픽인 게시물을 표시합니다. 모든 게시물 표시

2013년 1월 22일 화요일

콘솔 기반의 리눅스/BSD 네트워크 모니터 vnStat

vnStat 는 Linux, BSD 계열의 네트워크 트래픽 모니터이다. 콘솔기반의 도구로 간단하게 사용가능하며, 패킷 스니핑 도구와 같이 직접적으로 트래픽을 모니터 하지 않고 커널에서 제공해주는 네트워크 인터페이스 정보를 기반으로 정보를 보여준다. 직접 스니핑을 하지 않으므로 시스템 자원 사용면에서는 가볍다. 리눅스에서 사용하기 위해서는 커널 2.2 이상 되어야 한다.

주요기능으로는

- 루트 권한 없이도 사용할 수 있다.
- 낮은 시스템 자원 사용
- 다양한 출력 옵션 지원 (요약, 시간, 일,월,주 별로 제공 등)
- libgd 를 이용한 png 이미지 출력
- 동시에 여러개의 인터페이스를 모니터링 할 수 있음
- 빠르고 간단하게 설치하여 사용할 수 있다.

소스는 다음 경로에서 받을 수 있다.
http://humdi.net/vnstat/vnstat-1.11.tar.gz

사용할 수 있는 옵션은 아래와 같으며, 워낙 간결해서 옵션 이름만 보아도 어떤 기능인지 추측이 될 것이다.

$ vnstat --help
 vnStat 1.11 by Teemu Toivola 

         -q,  --query          query database
         -h,  --hours          show hours
         -d,  --days           show days
         -m,  --months         show months
         -w,  --weeks          show weeks
         -t,  --top10          show top10
         -s,  --short          use short output
         -u,  --update         update database
         -i,  --iface          select interface (default: eth0)
         -?,  --help           short help
         -v,  --version        show version
         -tr, --traffic        calculate traffic
         -ru, --rateunit       swap configured rate unit
         -l,  --live           show transfer rate in real time

See also "--longhelp" for complete options list and "man vnstat".

-h 옵션을 사용해 시간대별로 트래픽 현황을 표시한 것이다.

$ vnstat -h
 eth1                                                                     21:25
  ^           r
  |           r
  |           r                                            r
  |        r  r                                            r
  |      t r  r                                            r            t
  |     rt r  r                                            r  r      t  t
  |     rt r  r                                            r  r      t  t
  |     rt r  r         t                      r           r  r      t  t
  |     rt r  rt        t                   r  r        r  rt rt  t rt rt  t
  |  rt rt rt rt rt r  rt r              r  r  r  r  rt rt rt rt rt rt rt  t
 -+--------------------------------------------------------------------------->
  |  22 23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21

 h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)
22    250,801    205,825    06    100,529     49,054    14    205,356    157,877
23    705,144    885,844    07     52,806     44,130    15    258,228    226,265
00    928,792    224,789    08     52,298     45,230    16  1,028,043    343,843
01  1,271,180    292,260    09     70,396     61,719    17    755,804    293,309
02    212,296    186,481    10    155,502     72,451    18    235,691    284,886
03    165,931     91,943    11    266,673     92,497    19    275,554    658,386
04    150,997    437,071    12    392,244    122,185    20    307,819    850,813
05    180,170     56,391    13    133,829    120,555    21    117,474    292,787

일별로 트래픽 현황을 살펴보는 것이다.

$ vnstat -d

 eth1  /  daily

         day         rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
      07/03/09     10.90 GiB |    6.39 GiB |   17.29 GiB |    1.68 Mbit/s
      07/04/09     21.21 GiB |    5.65 GiB |   26.87 GiB |    2.61 Mbit/s
      07/05/09     10.58 GiB |    6.67 GiB |   17.25 GiB |    1.67 Mbit/s
      07/06/09     49.90 GiB |    9.69 GiB |   59.59 GiB |    5.79 Mbit/s

주별로도 트래픽 현황을 볼 수 있다.


$ vnstat -w

 eth1  /  weekly

                      rx      |     tx      |    total    |   avg. rate
   ---------------------------+-------------+-------------+---------------
    last 7 days    114.11 GiB |   56.58 GiB |  170.69 GiB |    2.38 Mbit/s
      last week    137.79 GiB |   58.96 GiB |  196.75 GiB |    2.73 Mbit/s
   current week    102.60 GiB |   49.92 GiB |  152.52 GiB |    2.49 Mbit/s
   ---------------------------+-------------+-------------+---------------
      estimated    121.38 GiB |   59.06 GiB |  180.44 GiB |


다음은 이미지 출력 기능을 이용해 만들어 낸 것이다.

summary


vnStat 의 장점으로는 PHP 웹 기반으로 구현된 것도 있고 윈도우 기반의 SystrayIcon 도 있다. 이미지 출력 또한 지원한다.( http://humdi.net/vnstat/cgidemo/ )
루트 권한 없이 가볍게 트래픽 현황을 모니터링 하고 싶은 분들에게 추천해 본다.

[참고]
1. http://humdi.net/vnstat/


2013년 1월 7일 월요일

NetEM을 이용한 Traffic Shaping (패킷 지연,유실,대역폭 제한등)


NetEM(Network Emulation)기능을 활용한 패킷의 지연, 중복, 유실 등을 테스트해보자. 에뮬레이션은 다양한 관점에서 활용될 수 있다. 애플리케이션의 벤치마크라든지 제품의 테스트 또는 대역폭의 제한으로까지 이용할 수 있다.

NetEM 은 크게 2개의 컴포넌트로 구성되어 있다. 큐를 위한 커널 모듈과 설정을 위한 커맨드라인 도구인 tc 가 있다. 커널모듈은 2.6.8 이후부터 통합되었고, iproute2 패키지의 한 부분이다. 여기서는 Traffic Shaping 과 관련하여 소개를 해 보고자 한다. Traffic Shaping 은 네트워크 트래픽을 제한하여 자원에 대한 우선순위를 조정한다. 사전에 정의된 분류, 정책, 큐 등을 이용하여 네트워크 자원을 필요에 따라 효과적으로 정의하는 것이다. 이것을 통해 여러분들은

- 네트워크 서비스 조절
- 대역폭의 제한
- 서비스에 대한 QoS(Quality of Service) 보장

을 통해 네트워크의 안정적인 운영, 서비스 가용성등을 확보할 수도 있다.

기본적으로 큐는 FIFO 패킷 큐 형태로 동작한다. 학교 수업때 한번쯤 들어보았을 만한 이 것은 먼저 들어온 것이 먼저 나간다는 First In First Out 개념이다.

이제 몇 가지 사용 예제를 알아볼 것인데, 여러분들이 사용하는 커널이 2.6.8 이상 이라면 특별한 설치는 필요하지 않다. 아마 대부분의 경우 사용할 수 있을 것이다.

해당 기능은 커널 컴파일 옵션시 다음 그림과 같이 선택되어 있으면 된다.



예제를 설명하기 전에 주로 'tc' 커맨드 도구를 이용하여 설명을 할 것이다. tc 의 기본적인 사용방법은 아래와 같다:




 tc  qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id |
       root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

       tc class [ add | change | replace ] dev DEV parent qdisc-id  [  classid
       class-id ] qdisc [ qdisc specific parameters ]

       tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ]
       protocol protocol prio priority filtertype [ filtertype specific param‐
       eters ] flowid flow-id

       tc [ FORMAT ] qdisc show [ dev DEV ]

       tc [ FORMAT ] class show dev DEV


qdisc 는 Queue Discipline (qdisc) 로 패킷을 받고 서비스하기 위한 순서를 정하기 위한 어떤 룰들의 집합이라고 보면 된다. 즉, 이것은 패킷 큐로 패킷을 전송할때 어떤 알고리즘을 사용해 패킷을 보낼지 정하는 것이다. qdisc 는 Classless, Classful, Root, egress, ingress 등이 있다. Root 는 classful/classless 랑 상관없이 각 네트워크 인터페이스의 상위 qdisc 이고 egress 는 밖으로 나가는 패킷에 대해서만 동작하고 ingress 는 내부로 들어오는 트래픽에 대해서 동작한다.

- 패킷 80ms 지연하기 


# tc qdisc add dev eth0 root netem delay 80ms

add 를 통해 dev 로 네트워크 인터페이스를 정의해 주고 qdisc 를 처리하기 위한 이름을 netem 로 지정하였다. 그리고 마지막으로 delay 를 80ms 주었다.

일단 정상적인 지연을 적용하기 전에 Ping 을 해 보았다. 평균적으로 0-1ms 속도가 나왔다. 하지만, 지연을 적용하고서는 다음과 같이 81ms 정도로 지연되었다.

# ping 203.255.xxx.xxx
PING 203.255.xxx.xxx (203.255.xxx.xxx) 56(84) bytes of data.
64 bytes from 203.255.xxx.xxx: icmp_req=1 ttl=244 time=81.0 ms
64 bytes from 203.255.xxx.xxx: icmp_req=2 ttl=244 time=81.0 ms
64 bytes from 203.255.xxx.xxx: icmp_req=3 ttl=244 time=81.2 ms
^C
--- 203.255.xxx.xxx ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 81.067/81.117/81.208/0.064 ms

- 패킷을 랜덤하게 지연시키기 (30ms ~ 80ms)


특정 값으로 정하기 보다는 지정된 범위안에서 랜덤하게 지연하는 것이다. 명령어 마지막에 추가적으로 값을 하나 더 지정해 주면 된다.

# tc qdisc change dev eth0 root netem delay 80ms 30ms
# ping 203.255.xxx.xxx
PING 203.255.xxx.xxx (203.255.xxx.xxx) 56(84) bytes of data.
64 bytes from 203.255.xxx.xxx: icmp_req=1 ttl=244 time=77.1 ms
64 bytes from 203.255.xxx.xxx: icmp_req=2 ttl=244 time=93.7 ms
64 bytes from 203.255.xxx.xxx: icmp_req=3 ttl=244 time=78.8 ms
64 bytes from 203.255.xxx.xxx: icmp_req=4 ttl=244 time=100 ms
^C
--- 203.255.xxx.xxx ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 77.131/87.483/100.138/9.756 ms

- 기존에 정의된 지연을 다른 값으로 변경


처음 add 를 사용한 것과 달리 change 라고만 바꿔주고 delay 시킬 값을 지정해 주면된다.

# tc qdisc change dev eth0 root netem delay 30ms
# ping 203.255.xxx.xxx
PING 203.255.xxx.xxx (203.255.xxx.xxx) 56(84) bytes of data.
64 bytes from 203.255.xxx.xxx: icmp_req=1 ttl=244 time=31.0 ms
64 bytes from 203.255.xxx.xxx: icmp_req=2 ttl=244 time=31.0 ms
64 bytes from 203.255.xxx.xxx: icmp_req=3 ttl=244 time=31.0 ms
^C
--- 203.255.xxx.xxx ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 31.024/31.062/31.090/0.205 ms

- 현재 정의된 네트워크 인터페이스의 설정 값 확인


# tc qdisc show dev eth0
qdisc netem 8001: root refcnt 2 limit 1000 delay 30.0ms

- 패킷 유실 15% 설정하기 


loss 라는 파리미터를 주고 값을 입력한다. 여기서는 약 15% 정도 유실을 설정하였다.

# tc qdisc change dev eth0 root netem loss 15%
# tc qdisc show dev eth0
qdisc netem 8001: root refcnt 2 limit 1000 loss 15%
# ping 203.255.xxx.xxx
PING 203.255.xxx.xxx (203.255.xxx.xxx) 56(84) bytes of data.
64 bytes from 203.255.xxx.xxx: icmp_req=1 ttl=244 time=0.935 ms
64 bytes from 203.255.xxx.xxx: icmp_req=3 ttl=244 time=1.36 ms
64 bytes from 203.255.xxx.xxx: icmp_req=4 ttl=244 time=1.10 ms
64 bytes from 203.255.xxx.xxx: icmp_req=6 ttl=244 time=1.01 ms
64 bytes from 203.255.xxx.xxx: icmp_req=7 ttl=244 time=1.00 ms
64 bytes from 203.255.xxx.xxx: icmp_req=8 ttl=244 time=1.57 ms
^C
--- 203.255.xxx.xxx ping statistics ---
8 packets transmitted, 6 received, 25% packet loss, time 7011ms
rtt min/avg/max/mdev = 0.935/1.164/1.570/0.227 ms

ping 을 해보면 패킷이 유실되는 것 같이 지연이 발생한다.
예를들어 0.1% 라면 대략 1000개중에 1개 정도가 랜덤하게 Drop 된다고 볼 수 있다.

- 패킷 중복 


# tc qdisc change dev eth0 root netem duplicate 1%

duplicate 를 이용하여 정의하면 된다.

- 패킷 깨트리기 


# tc qdisc change dev eth0 root netem corrupt 0.1%

- 정의된 설정정보 제거하기 


# tc qdisc del dev eth0 root
# tc qdisc show dev eth0
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

- 특정 IP 목적지 우선순위 조정 


203.255.xxx.xxx 로 나가는 것은 Priority 를 3으로 조정하는 것이다.

# tc qdisc add dev eth0 root handle 1: prio
# tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst 203.255.xxx.xxx/32 flowid 1:3
# tc qdisc show dev eth0
qdisc prio 1: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

- 패킷 대역폭 정의하기 


# tc qdisc add dev eth0 root handle 1:0 netem delay 100ms
# tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
# tc -s qdisc ls dev eth0
qdisc netem 1: root refcnt 2 limit 1000 delay 100.0ms
 Sent 306774 bytes 4269 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 5p requeues 0
qdisc tbf 10: parent 1:1 rate 256000bit burst 1600b lat 43.8ms
 Sent 305784 bytes 4254 pkt (dropped 0, overlimits 3 requeues 0)
 backlog 0b 5p requeues 0

지연을 100ms 로 지정하였고, 대역폭을 256Kbit 로 설정하였다.

이상 여기까지 간단히 NetEM 을 이용한 트래픽 제어를 살펴보았다. 간단하게만 언급하였으니 세부적인 것은 Man Page 등을 살펴보길 바란다.



[참고]
http://www.linuxfoundation.org/collaborate/workgroups/networking/netem

2012년 5월 2일 수요일

*NIX 콘솔 기반 네트워크 사용량 표시 도구 - nload

현재 네트워크 사용량을 표시해주는 nload 를 소개한다. 사실 너무나도 많은 도구들이 있는데, 그래도 이런 형태의 도구는 있다고 알아두면 좋기 때문에 이름만은 기억해 두자. 'nload' 는 콘솔 기반의 프로그램으로 실시간으로 네트워크 상태를 표시해 준다. 아스키 형태의 그래프로도 말이다.


크게 Incoming/Outgoing 으로 화면이 나뉘어져 있으며 옵션은 다음과 같다.


nload  [-a period] [-i max_scaling] [-m] [-o max_scaling] [-t interval]
       [-u h|H|b|B|k|K|m|M|g|G] [-U h|H|b|B|k|K|m|M|g|G] [devices]

디바이스가 여러개 있는 경우 -m 으로 한번에 표시할 수 있으며, -t 로 화면의 Refresh 시간을 지정할 수 있다. 기본 값은 500 밀리세컨드 이다. 참고로 만약 100 밀리세컨드 이하로 값을 지정하면 빈번하게 계산해야 하기 때문에 부정확해 질 수도 있다는 점은 알아두길 바란다.

-u 로 트래픽 수치 표현 방법을 지정할 수 있다. 비트, 킬로비트, 메가 비트등의 옵션이 있다.

F2 키를 누르면 옵션 화면이 나타나서 설정 값등을 볼 수 있으며, 이동키를 통해 움직일 수도 있다.

다운로드는 다음 경로에서 가능하다

http://www.roland-riegel.de/nload/

데비안 계열 사용자는 apg-get install nload 로 쉽게 설치할 수 있다.

2012년 1월 8일 일요일

1분에 640 테라바이트 트래픽이 흘러다닌다고?

과연, 인터넷에서 전송되고 있는 데이터량은 얼마나 될까? 최근 인텔(Intel)에서 재미있는 인포그래픽을 발표하였다. 매 분 인터넷 상에서 무슨일이 일어나는지 주요한 지표를 수치화 한 것이다. 트래픽 데이터 관점에서만 보더라도 인텔은 인프라에 대한 투자는 충분히 이뤄지고 있는지 질문을 던지고 있다. 인터넷에 접속되는 디바이스는 전 세계 인구를 넘어 설 만큼 크게 증가하고 있는데, 과연 네트워크는 이러한 예측에 충분히 대비하고 있는가에 대한 것이다.



















[이미지출처 : 인텔]

약간 관점을 달리해서 생각해 보자. 각국 정부는 사회기반시설에 대한 투자를 한다. 도로, 항만, 철도 기타 등에 말이다. 인터넷 인프라는 투자하면 안되는 것일까? 어찌보면 이제 인터넷은 세계 경제 움직임의 중심에 서 있기도 하다. 그런 의미에서 보면, 네트워크 인프라는 중요하지 않을 수 없다.

그건 그렇고, 인포그래픽의 주요한 부분을 정리하면 다음과 같다:

- 전세계 IP 네트워크에서 매 분 마다 거의 640 테라 바이트의 트래픽이 흘러다니고 있다.
- 6백만 페이스북 페이지 뷰어, 2백만개의 구글 검색 쿼리
- 유투브에 30시간의 비디오 데이터가 올려지고
- 130 만명이 비디오를 본다.

한달, 아니 1주도 아니고 매 분마다 발생하고 있는 데이터라고 한다.

수치화 해서 보니 어마어마한 데이터다. 인프라 관리 입장에서 보면 이 수많은 데이터를 어떻게 관리하고 저장하고 운영해야 할지 참 쉽지 않은 일들이다.

이렇게 엄청난 데이터가 네트워크를 통해서 흘러다니고 있는데, 분석한다면 ?
여러분의 상상력에 맡기겠다.


2011년 4월 12일 화요일

암호화된 VoIP 트래픽의 문장 50% 를 인지할 수 있을까?

구글, MIT, 노스캐롤리나 대학, 존스홉킨스 대학에서 다양한 비트레이트 코덱으로 암호화된 VoIP 트래픽에서 문장을 탐지할 수 있는 방법에 대해서 논문을 발표한 것이 있다.

http://portal.acm.org/citation.cfm?doid=1880022.1880029

일단 주제부터가 관심을 끄는데, 암호화된 음성 데이터에서 문장을 인식할 수 있다는 것은, VoIP 통신 내용을 감청할 수 있다는 뜻이 되기도 한다. 이 논문의 결론부터 보면 암호화된 트래픽에서 평균 정확도는 50% 가까이 되며, 특정한 문구에서는 90% 이상이 될만큼 인지할 수 있다고 한다.
이 논문에서는 사람의 음성이나 녹음된 단어와 같이 사전에 샘플링된 데이터를 이용하지 않고, 그들이 고안해낸 기술적 방법으로 음성을 인식했다고 한다.  그렇다고 VoIP 트래픽 데이터를 다 감청한다는 뜻은 아니다. 어디까지나 학술적으로 발표된 내용이며, 다양한 환경에 따라 제약이 있기 마련이다. 우선, 이 음성 대상도 미국인들의 음성에 기준으로 되어 있다. :-)

ACM 에서는 해당 자료에 접근하기 위해서는 구매를 해야 하는데,  IEEE S&P 2008 에서 발표된 문서를 다음 사이트에서 살펴볼 수 있다. 그냥 참고수준에서 한번 살펴보면 좋을것 같다. VoIP 서비스를 하고 있는 기업이라면.

http://cs.unc.edu/~fabian/papers/oakland08.pdf

와이어샤크에는 VoIP 관련한 메뉴를 볼 수 있는데, 테스트 준비가 되면 VoIP 관련한 내용도 언급해 보도록 하겠다.

[참고]
1. Hidden Markov model
http://en.wikipedia.org/wiki/Hidden_Markov_model

2010년 12월 20일 월요일

트래픽 흐름에 따라 사운드를 출력해 보자!

재미있는 유틸리티 하나를 소개해 본다. 일전에 트래픽 흐름 상태를 키보드의 LED 표시를 통해
깜빡 거리는 것을 소개한적 있다. 이와 같이 조금은 재미있는 형태의 프로그램이라 보면 된다.

키보드 LED 정보를 이용한 블로그 글은 다음을 참고한다.


오늘 소개하고자 하는것은, 트래픽 흐름의 형태에 따라 사운드를 출력시키는 것이다. 트래픽 종류에 따라
지정된 사운드가 스피커를 통해 흘러나온다. 이름하여 Tcpsound 이다. 파일은 아래 URL 에서 받을 수 있다.

http://www.ioplex.com/~miallen/tcpsound/

컴파일 하기 위해서는 libsdl 와 libmba 라이브러리가 필요하다. libmba 는 아래 경로를 참고한다.


APT 패키지 사용자는 sdl 패키지를 아래와 같이 설치할 수 있다.

# apt-cache search libsdl-sound
libsdl-sound1.2-dev - Development files for SDL_sound
libsdl-sound1.2 - Decoder of several sound file formats for SDL
# apt-get install libsdl-sound1.2-dev

이후 다운받은 tcpsound 패키지의 압축을 풀고 'make' 를 해 주면 된다.
컴파일 된 tcpsound 를 실행하면 아래와 같은 메시지가 발생된다.

$ ./tcpsound
searchpath: /usr/share/sounds:/usr/local/share/sounds
proto  src   dst wav path
src/sound.c:64:path_search: No such file or directory: generic.wav
  src/sound.c:154:sound_load_cfg: Rule will be ignored.
src/sound.c:64:path_search: No such file or directory: sonar.wav
  src/sound.c:154:sound_load_cfg: Rule will be ignored.
src/sound.c:64:path_search: No such file or directory: warning.wav
  src/sound.c:154:sound_load_cfg: Rule will be ignored.
src/sound.c:64:path_search: No such file or directory: pop.wav
  src/sound.c:154:sound_load_cfg: Rule will be ignored.
src/sound.c:64:path_search: No such file or directory: info.wav
  src/sound.c:154:sound_load_cfg: Rule will be ignored.
src/sound.c:64:path_search: No such file or directory: cuckoo.wav
  src/sound.c:154:sound_load_cfg: Rule will be ignored.

사운드 파일을 찾지 못해서 발생하는 것이다. 이럴 경우 따로 파일의 경로를 지정해 주거나 또는, make install 하게 되면 적절한 위치에 다 복사가 된다.

# make install
./mktool -i -m 0755 tcpsound /usr/local/bin
./mktool -i wavs/*.wav /usr/local/share/sounds
./mktool -i docs/man/*.1.gz /usr/local/man/man1

installation successful

tcpsound 를 실행하면 각 프로토콜 또는 포트번호 별로 지정된 사운드가 있는 것을 알 수 있다.

# tcpsound
searchpath: /usr/share/sounds:/usr/local/share/sounds
proto  src   dst wav path
ARP      0     0 /usr/local/share/sounds/generic.wav
ICMP     0     0 /usr/local/share/sounds/sonar.wav
IP      53    53 /usr/local/share/sounds/warning.wav
IP       0    80 /usr/local/share/sounds/pop.wav
IP      80     0 /usr/local/share/sounds/info.wav
IP     137   137 /usr/local/share/sounds/cuckoo.wav
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
02:55:06.019559 IP 204.152.191.39.80 > 192.168.15.11.38248: . 2697887135:2697888583(1448) ack 4005699112 win 88 <nop,nop,timestamp 1513910257 322740>
02:55:06.044274 IP 204.152.191.39.80 > 192.168.15.11.38248: . 1448:2896(1448) ack 1 win 88 <nop,nop,timestamp 1513910257 322740>

실행되면 스피커에서 뽁,뽀,뽁 과 같은 사운드가 발생되는 들을 수 있다. 이외 -r 옵션을 이용하면
원격지로 로그인하여 실행도 가능하다. 원격지 로그인은 SSH 접속으로 이루어진다.

이 tcpsound 를 보면 그냥 단순히 재미있는 프로그램이기도 하지만, 특별한 목적으로 만들어 사용하는 것도
나름 의미가 있을것 같다. 특정한 포트를 임의의 사운드 파일로 지정하여,
트래픽이 발생될 경우 알람음 형태로 이용이 가능할 수도 있다. 평소에 접근이 이루어지지 않는 포트인데
외부에서 접근이 이뤄지면 음성으로 알려준다면, 나름 좋은 아이디어 아닐까.
특히나 관제 및 서비스 운영 팀 같은데서는 유용하게 이용될 수도 있을것 같다.

참고로, tcpdump 를 기본으로 이용하므로 tcpdump 가 설치되어 있어야 한다.


2010년 11월 17일 수요일

올해 4월, 전세계 인터넷의 15%가 중국으로 흘렀다고?

이미지출처 : NDIA


흥미로운 기사 하나를 접했다. 올 초, 정확히는 4월 18일 인터넷 트래픽 양의 15% 가까이가 18 분동안 중국으로 우회 되었다는 것이다. 이 사실은
11월17일 미 국회에서 미국-중국의 양국관계에 관한 경제, 보안을 검토 하는 연례보고서에서 그 내용이 알려졌다.

18분동안 중국으로 리다이렉션된 트래픽은 미국 정부, 국방부 및 군사 관련 사이트 및 델, 야후, 마이크로소프트, IBM 과 같은 상업 사이트까지 많은 수를 포함하고 있다.

인터넷에서는 해당 사이트를 찾아갈때 라우팅이라는 경로를 통해 최적의 경로를 따라 사이트를 찾아 들어간다. 정상적인 경우라면 중국을 거치지 않고 들어가야 하는데, 어떤 이유에서 해당 사이트를 찾아 들어가기 까지 중국의 차이나 텔레콤을 거쳐서 정보가 흘러갔다는 것이다.

그렇다면 중국에서는 트래픽을 충분히 감시할 수 있는 상황이 되었을 것이다. 암호화 되지 않은
트래픽 이라면 이메일, 메신저와 같은 내용들이 감청당했을 수 있다. 이렇게 중국을 거쳐서 트래픽이 흘렀어도, 사용자가 느끼기에는 큰 차이가 없었기 때문에 인지도 늦었던 것 같다.

현재 이와 같은 상황이 발생된 이유에 대해 세부적인 사항은 많이 알려져 있지 않다.

정확한 사실 한가지는 2010년4월18일 인터넷 트래픽의 15%가 18분동안 중국의 차이나 텔레콤으로
흘렀다는 사실이다. 무슨일이 일어났을지는 모르지만, 정보 수집형태로 이용된다면 아주 무서운 일이 아닐 수 없다.

물론, 국내에서도 이와 같은 일이 충분히 일어날 수 있다. 만약 악성코드가 감염되어 특정한 곳을 거쳐서 트래픽이 흐르도록 조정된다면, 정보는 중간에서 감청될 수 있다. 사이버전에 효과적으로 이용될 수 있는 방법중의 하나가 될 것이다.

현재 나의 트래픽이 어느 경로로 흘러가고 있는가가 궁금하다면 traceroute 로 쉽게 확인할 수 있다. 윈도우 사용자라면 tracert 명령어를 이용하면 된다.

<윈도우에서 경로추적 예>

C:\>tracert google.com

최대 30홉 이상의
google.com [74.125.53.104](으)로 가는 경로 추적:

  1     5 ms    <1 ms    <1 ms  192.168.0.200
  2     7 ms     7 ms     7 ms  218.146.42.254
  3     7 ms     6 ms     7 ms  121.140.24.161
  4     7 ms     7 ms     6 ms  218.146.42.253
  5     8 ms     7 ms     7 ms  112.190.32.93
  6     8 ms     7 ms     7 ms  218.145.32.193
  7     7 ms     7 ms     7 ms  112.174.81.114
  8     7 ms     7 ms     7 ms  112.174.83.34
  9   123 ms   122 ms   123 ms  112.174.87.126
 10   146 ms   140 ms   133 ms  74.125.51.181
 11   154 ms   123 ms   131 ms  209.85.249.32
 12   124 ms   134 ms   124 ms  66.249.94.199
 13   130 ms   147 ms   130 ms  216.239.46.200
 14   130 ms   130 ms   129 ms  216.239.48.139
 15   135 ms   142 ms   143 ms  72.14.232.70
 16   130 ms   131 ms   130 ms  pw-in-f104.1e100.net [74.125.53.104]

추적을 완료했습니다.

이와 관련 세부적 내용이 확인되면 다시 공유하도록 하겠다.

From rigel.

[참고]
1. ABC뉴스

2010년 10월 4일 월요일

윈도우환경에서 실시간 그래프를 통해 트래픽을 감시해 보자.

윈도우환경에서 간단히 트래픽 상태를 살펴볼 수 있는 도구 하나를 소개한다.
이름은 iTraffic Monitor 이며, 네트워크 모니터링과 간단한 리포팅을 해준다. 아래 이미지는 사용 예로,
그래프에 현재 사용량을 나타내준다. 네트워크 모니터링을 많이 해 보신 분이라면 MRTG 를 본적이 있을 것이다. 그것과도 조금은 흡사한 형태로 표시된다.


현재 내 컴퓨터에서 사용되는 트래픽을 실시간적으로 모니터링 하거나, 일/주/월 별 사용량등을 파악하는데는 유용할 것이다. 화면은 간단하게 구성되어 있어, 어렵지 않게 사용할 수 있다. 화면에서 오른쪽 마우스를 클릭하면 몇가지 메뉴를 선택할 수가 있다.

이 프로그램을 사용하기 위해서는 Winpcap 이 설치되어야 하며, 다운로드는 다음의 경로에서 할 수 있다.

2010년 9월 5일 일요일

ProcNetMonitor 로 트래픽을 유발하는 프로세스를 쉽게 찾아보자.

윈도우에서 사용 가능한 프로세스 네트워크 모니터 도구가 있어 소개한다. 여러가지 도구들이 있긴 한데, 오늘은 이 도구가 사용하기도 아주 쉽고, 유용할거 같다는 생각이 든다. 윈도우에서 악성코드에 감염되었다고 가정해보자.  그리고, 트래픽 확인을 위해 와이어샤크를 통해 네트워크 트래픽이 발생되고 있음을 확인한다. 그런데, 윈도우의 어떤 프로세스가 이 트래픽을 유발하고 있는지 알기가 어려운 것이다. 특정 프로세스에서 발생하면 쉬운데,
정상 서비스 프로세스에 인젝션 되어 발생되면 까다로워진다.

아래 프로그램은 각 프로세스별로 TCP, UDP, 연결 카운트를 보여주고 있다. 즉, 이 카운트가 크게 증가되었거나 하면 해당 프로세스를 의심해 볼 수 있다. 프로세스를 클릭하여 살펴보면, 어디로 연결되었는지 세부 정보를 확인해 볼 수가 있다. 이 도구의 사용방법을 설명할 것도 없이 워낙에 심플해서, 처음 이런류의 프로그램을 접하는 분들이라도 알 수 있을 정도이다.


Properties 를 누르면 프로세스에 대한 속성을 확인해 볼 수 있으며, Export 를 하면 프로세스 리스트를 HTML 파일로 저장할 수 있다.  다운로드는 다음의 경로에서 할 수 있다.


그리고, 이 프로그램이외에 분석에 유용하게 사용할 만한 도구들도 몇가지 있으므로, 한번 살펴보기 바란다.
패킷을 분석하는데는 그 목적이 있고, 그 목적을 달성하기 까지는 용도에 따라서 이러한 도구가 유용하게 사용될 것이다.

2010년 5월 18일 화요일

패킷통신의 흐름을 알아볼땐, Flow Graph 를 사용해 보자

패킷파일을 분석하다 보면 텍스트문자열로는 한계를 느낀다. 그래서 비주얼한 방법들을 이용하여
분석하기 위한 다양한 도구들이 나와있다. 앞서 소개한 포스팅에서도 자바를 이용한 도구를 소개하였다.
이번에는 대중적으로 많이 이용되는 와이어샤크의 자체기능을 몇 가지 알아보고자 한다. 몇 번에
나눠서 소개하고자 하는데, 그 첫번째로 와이어샤크의 상태 기능중 Flow Graph 기능이다.

통신과정을 시퀀스하게 그래프 형태로 보여주는 기능이다. 아래 그림과 같이 각 과정이 시퀀스 형태로
나와있고, 각 통신을 클릭하면 메인화면이 해당 위치로 이동하게 되어, 필요하면 세부 패킷을
살펴볼 수 있다. 텍스트로 이뤄진 파일보다는 통신과정이 한눈에 들어와서 편하다.


해당 그래프를 얻기 위해서는 Statistics -> Flow Graph 를 선택하면 된다.
선택하면 모든 패킷을 대상으로 할 것인지, 선택된 패킷만을 나열할지 선택한다. 그외 간단한 몇 가지
옵션이 더 있는데 여러분들이 필요에 따라 선택하면 된다.

다만, 트래픽이 너무 큰 상태에서라면 그래프 생성에 시간이 많이 소요될 수 있고, 너무 많은 정보가
나열되므로. 이런 경우는 적절히 필터를 사용하여 그래프를 생성하는 것이 좋다.

즉, 내가 분석을 해야 하는 대상의 범위를 정확히 파악해야 한다. HTTP 가 그 대상이라면
HTTP 를 대상으로 범위를 한정해야 할 것이다. 또, 그 반대로 의심스러운 패턴을 찾는다면,
전체중에서 불필요한 것을 제외시키고 반영하면 될 것이다. 이미 알고 있는 프로토콜이거나
내부에서 사용되는 특정한 것이라면 제외를 시켜 필터를 적용하면 문제를 찾아나가는데 수월할 것이다.

또한, Flow Graph 에는 그래프 형태 뿐만 아니라 텍스트로도 저장할 수 있는 기능을 제공한다.
'Save As' 가 보일것이다. 이것을 누르면 화면에서 보는 형태와 같이 시퀀스 형태로 저장해 준다.


텍스트로도 이렇게 깔끔히 정리해 주니 참 편하다. 회사의 보고서 용도로 활용하기에도 썩 나쁘지는
않을 것이다. 통신의 과정을 깔끔하게 얻고 싶다면,
Flow Graph 기능을 이용해 보시라.

다음번에는 와이어샤크의 IO Graph 를 소개하겠다.

2010년 4월 26일 월요일

키보드 LED 를 이용한 패킷 송신/수신 표시하기

재미있는 유틸리티를 하나 소개하고자 한다. 트래픽 패킷 오가는 내용을 패킷 덤프 프로그램 말고
다른 방법으로 확인하면 어떨까? 소개하고자 하는 TLEDS 는 패킷의 인/아웃 수신상태를
키보드의 LED 를 통해 표시해 준다.

키보드에 NUM LOCK, CAPS LOCK, SCROLL LOCK 이 눌러졌을때 표시해 주는 부분이 있다.
보통 키보드의 우측 상단에 있는데, 바로 이 부분을 수신 상태를 표시하는 부분으로 활용한 것이다.
3가지의 키 부분중 NUM LOCK, SCROLL LOCK 이 네트워크 패킷의 송신 / 수신 상태를 가리킨다.
재밌는 아이디어 아닌가 ?

설치는 간단하다. 데비안 사용자라면 아래와 같이 설치할 수 있다.

# apt-get install tleds

컴파일을 수행할 사용자 라면 아래 경로에서 정보를 얻을 수 있다.


설치하고 나면 아래와 같이 실행이 되는데 -d 옵션은 모니터링할 인터페이스를 지정해 주고 얼마주기로
상태를 표시할지 정의한 것이다.

# ps -ef | grep tled
root     19566     1  0 20:21 ?        00:00:00 /usr/bin/tleds -c -q -d 100 eth0
root     19992  3822  0 20:22 pts/2    00:00:00 grep tled

실행하고 나면 여러분의 키보드는 이제 트래픽 송신/수신 상태를 가리킨다.

재미로 사용할 수 있는 부분이기도 하지만 업무에 응용해 볼수도 있을것 같다. 평상시 켜 두고 있는데,
갑자기 이 두개의 불빛이 격렬하게 움직인다면 분명 트래픽이 크게 오고 간다는 것을 가르킨다.
평소와는 다르게 움직인다는 것은 무엇일까? 일단 한번 확인할 필요는 있을 것이다.

항상 트래픽을 감시할 필요없이, 키보드 상태 표시를 보는 것만으로도 네트워트 상태를 알 수 있다는 점!
나름 유용하게 활용할 수 있지 않을까 ?

P.S /proc/net/dev 정보를 이용하므로, 이곳에 접근이 가능하여야 한다.