시스템/TCP_IP Network2010. 8. 17. 10:41
[root@sniper root]# tcpdump -i eth0 -e -X -n host 211.174.49.204
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: listening on eth0
10:40:54.644934 0:14:5e:bb:6b:ee 0:d:61:7e:c8:e7 arp 60: arp who-has 211.174.49.
200 (0:d:61:7e:c8:e7) tell 211.174.49.204 (0:14:5e:bb:6b:ef)
0x0000   0001 0800 0604 0001 0014 5ebb 6bef d3ae        ..........^.k...
0x0010   31cc 000d 617e c8e7 d3ae 31c8 0000 0000        1...a~....1.....
0x0020   0000 0000 0000 0000 0000 0000 0000             ..............
10:40:54.644961 0:d:61:7e:c8:e7 0:14:5e:bb:6b:ef arp 42: arp reply 211.174.49.20
0 is-at 0:d:61:7e:c8:e7
0x0000   0001 0800 0604 0002 000d 617e c8e7 d3ae        ..........a~....
0x0010   31c8 0014 5ebb 6bef d3ae 31cc                  1...^.k...1.

-e : 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다.
-X : 각각의 패킷을 헥사코드로 출력한다.
-n : 모든 주소들을 번역하지 않는다(port,host address 등등)




Tcpdump의 옵션들

  -a : Network & Broadcast 주소들을 이름들로 바꾼다.
  -c Number : 제시된 수의 패킷을 받은 후 종료한다.
  -d : comile packet-matching code를 사람이 읽을 수 있도록 바꾸어 표준 출력으로
      출력하고, 종료한다.

  -dd : packet-matching code C program의 일부로 출력한다.
  -ddd : packet-matching code를 숫자로 출력한다.
  -e : 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다.
  -f : 외부의 internet address를 가급적 심볼로 출력한다(Sun yp server와의 사용은
        가급적 피하자).

  -F file : filter 표현의 입력으로 파일을 받아들인다. 커맨드라인에 주어진 추가의 표현들은
    모두 무시된다.

  -i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지저되지 않으면
    시스템의 인터페이스 리스트를 뒤져서 가장 낮은 번호를
    가진 인터페이스를 선택한다(이 때 loopback은 제외된다).

  -l : 표준 출력으로 나가는 데이터들을 line buffering한다. 다른 프로그램에서
      tcpdump로부터 데이터를 받고자 할 때, 유용하다.

  -n : 모든 주소들을 번역하지 않는다(port,host address 등등)
  -N : 호스트 이름을 출력할 때, 도메인을 찍지 않는다.
  -O : packet-matching code optimizer를 실행하지 않는다. 이 옵션은 optimizer
        있는 버그를 찾을 때나 쓰인다.

  -p : 인터페이스를 promiscuous mode로 두지 않는다.
  -q : 프로토콜에 대한 정보를 덜 출력한다. 따라서 출력되는 라인이 좀 더 짧아진다.
  -r file : 패킷들을 '-w'옵션으로 만들어진 파일로 부터 읽어 들인다. 파일에 "-" 가 사용되면
        표준 입력을 통해서 받아들인다.

  -s length: 패킷들로부터 추출하는 샘플을 default값인 68Byte외의 값으로 설정할 때
        사용한다(SunOS NIT에서는 최소가 96Byte이다). 68Byte
        IP,ICMP, TCP, UDP등에 적절한 값이지만 Name Server NFS 패킷들의 경우에는
        프로토콜의 정보들을 Truncation할 우려가 있다. 이 옵션을 수정할
        때는 신중해야만 한다. 이유는 샘플 사이즈를 크게 잡으면 곧 패킷 하나하나를 처리하는데
        시간이 더 걸릴 뿐만아니라 패킷 버퍼의 사이즈도
        자연히 작아지게 되어 손실되는 패킷들이 발생할 수 있기 때문이다. , 작게 잡으면
        그만큼의 정보를 잃게되는 것이다. 따라서 가급적
        캡춰하고자 하는 프로토콜의 헤더 사이즈에 가깝게 잡아주어야 한다.

  -T type : 조건식에 의해 선택된 패킷들을 명시된 형식으로 표시한다. type에는 다음과
        같은 것들이 올 수 있다. rpc(Remote Procedure Call),
        rtp(Real-Time Applications protocol), rtcp(Real-Time Application control
        protocal), vat(Visual Audio Tool), wb(distributed White Board)

  -S : TCP sequence번호를 상대적인 번호가 아닌 절대적인 번호로 출력한다.
  -t : 출력되는 각각의 라인에 시간을 출력하지 않는다.
  -tt : 출력되는 각각의 라인에 형식이 없는 시간들을 출력한다.
  -v : 좀 더 많은 정보들을 출력한다.
  -vv : '-v'보다 좀 더 많은 정보들을 출력한다.
  -w : 캡춰한 패킷들을 분석해서 출력하는 대신에 그대로 파일에 저장한다.
  -x : 각각의 패킷을 헥사코드로 출력한다.

 Tcpdump의 사용 예제들

  security라는 호스트로부터 날아오고, 날아가는 패킷들을 출력


  # tcpdump host security
  security mazinga, getarobo 사이에 날아다니고 있는 패킷들을 출력

  # tcpdump host security and \( mazinga or getarobo \)
  security에서 elgaim을 제외한 모든 호스트로 날아다니는 IP 패킷들을 출력


  # tcpdump ip host security and not elgaim
  gateway amurorei를 거치는 ftp에 관련된 패킷들을 출력

  # tcpdump 'gateway amurorei and ( port ftp or ftp-data )'
   local호스트가 아닌 호스트와 로컬호스트가 맺는 TCP 커넥션의 시작과 마지막 패 킷들을
   출력한다(SYN, FIN 패킷).

  # tcpdump 'tcp[13] & 3 != 0 and not src and dst net non-local'
  gateway amurorei를 지나는 576Byte보다 큰 패킷들을 출력한다

  # tcpdump 'gateway amurorei and ip[2:2] > 576'
   Ethernet boradcast 혹은 multicast를 통해서 보내진 것이 아닌, IP broadcast 혹 은
   multicast 패킷들을 출력한다.

  # tcpdump 'ehter[0] & 1 = 0 and ip[16] >= 224'
  Echo request/reply가 아닌 ICMP 패킷들을 모두 출력한다.

  # tcpdump 'icmp[0] != 8 and icmp[0] != 0'


--------------------------------------------------------------------------------------------------

TCPDUMP<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

tcpdump는 네트워크 인터페이스 상에 있는 패킷 중에서 보고자하는 패킷의 헤더 정보를

   보여주는 툴임.

○ 이 프로그램은 ftp://ftp.ee.lbl.gov/ 에 있으며, 이외에도 많은 사이트에서 구할 수 있음.

tcpdump를 컴파일하여 설치하기 위해서는 libpcap(packet capture library)가 먼저 설치

   되어야 함. libpcap 역시 ftp://ftp.ee.lbl.gov/에서 구할 수 있음.

○ 현재 tcpdump의 버전은 3.4 .

○ 사용법

   Linux에서 root로 로그인해서 사용함.

   Syntax

 

         [root@localhost /root]# tcpdump -h      

          tcpdump version 3.4

          libpcap version 0.4

          Usage: tcpdump [-adeflnNOpqRStvxX] [ -b protocol] [ -c count]

       [ -i interface ] [ -r file ] [ -s snaplen ]

       [ -T type ] [ -w file ] [ -F file ]

       [ -u username ] [ expression ]

         [root@localhost /root]#

 

○ 옵션 1

   -a : Ascii 코드로 출력함.

   -d : 컴파일된 코드를 사람이 읽을 수 있는 형태로 출력한 후 종료.

   -dd : 출력을 C 프로그램 형태로 출력.

   -ddd: 출력을 10진수로 출력.

   -e : 각각의 출력 라인에 링크 레벨의 헤더를 출력.

   -f : 외부 주소를 가능하면 심볼이 아닌 숫자로 출력.

   -l : 출력 결과를 표준 에러로 출력. 이는 출력 결과를 회면으로 보면서 동시에 파일

          에 저장하고자 할 때 사용.

          Ex) #tcpdump -l > data & tail -f data

   -n : 주소(호스트 주소와 포트번호)를 이름으로 바꾸지 않음.

   -N : 호스트 이름에서 도메인 주소를 출력하지 않음.

   -O : 출력을 최적화하여 출력하지 않음.

   -p : 인터페이스가 promiscuous 모드로 될 수 없도록 함.

   -q : 프로토콜 정보를 보통보다 줄여서 출력.

   -R : raw 소켓 인터페이스를 사용함.

   -S : TCP 절대(상대적이 아님) sequence number를 출력.

   -t : 출력 라인에 time stamp를 출력하지 않음.

   -v : verbose 모드. 출력 정보를 좀 더 상세히 출력함.

   -vv : -v 모드보다 더 자세한 정보를 출력함.

   -x : 패킷을 16진수로 출력함.

   -X : 패킷 소켓 인터페이스를 사용함.

○ 옵션 2

   -b protocol : 지정된 데이터 링크 계층의 프로토콜을 사용하는 패킷을 수집함. 여기

      의 프로토콜로는 ip, ipv6, 802.2, 802.3, arp, rarp, dec, lat, atalk, x.25, ipx 등이 있음.

   -c count : count 만큼의 패킷을 수집한 후 종료함.

   -i interface : 패킷을 수집하는 인터페이스를 지정함. 만약 아무런 입력이 없으면

      시스템에서 가장 번호가 작은 이용 가능한 인터페이스로 자동 설정됨.

   -r file : -w' 옵션으로 만들어진 파일로부터 패킷을 읽음.

   -s snaplen : 수집할 패킷의 길이(바이트 단위)를 지정함. 디폴트값은 68.

   -T type : expression을 만족하는 패킷을 지정된 type으로 해석함.

   -w file : 수집된 패킷을 file에 저장함. -r' 옵션으로 나중에 읽을 수 있음.

   -F file : expression이 많을 때 별도의 파일을 사용하여 expression이 들어 있는

      파일을 지정할 경우에 사용됨.

   -u username : root 권한을 지정된 사용자 계정에서 사용할 수 있도록 함.

 

Expression

   expression 부분은 패킷을 선택적으로 캡쳐하기 위한 조건을 적는 부분임.

   expression이 없으면 네트워크 상의 모든 패킷을 캡쳐링하며, expression을 참으로

      하는 패킷만 수집하게 됨.

   expression은 하나 이상의 primitives로 구성되며, primitives는 일반적으로 qualifier

      id(이름이나 숫자)로 구성됨.

   Qualifier(한정자)의 세종류

      - type : id가 어떠한 의미를 갖는지를 알려줌. 가능한 type으로는 host, net, port

        이 있음.

      - dir : 전송 방향을 나타냄. 가능한 방향으로는 src, dst, src or dst, src adn dst

        있음.

      - proto : 특정한 프로토콜의 패킷만을 받아들이도록 함. 가능한 proto로는 ether,

        fddi, ip, arp, rarp, decnet, lat, sca, moprc, tcp, udp 등이 있음.

   Primitives

      - dst host <host> : 패킷의 목적지 필드에 있는 IP 주소와 <host>가 일치하면 참이

        . 여기서 호스트는 주소와 이름 모두 가능함.

      - src host <host> : 패킷의 송신지 필드에 있는 IP 주소와 <host>가 일치하면 참이

        . 여기서 호스트는 주소와 이름 모두 가능함.

      - host <host> : 패킷의 목적지나 송신지 IP 주소중 어느 하나라도 <host>와 일치하

        면 참이 됨.

      - ether dst <ehost> : 패킷의 목적지 이더넷 주소가 <ehost>와 일치하면 참이 됨.

      - ether src <ehost> : 패킷의 송신지 이더넷 주소가 <ehost>와 일치하면 참이 됨.

      - ether host <ehost> : 패킷의 목적지 또는 송신지 이더넷 주소가 <ehost>와 일치

        하면 참이 됨.

      - dst net <net> : 패킷의 목적지 필드에 있는 IP 주소가 <net>가 일치하는 네트워

        크 번호를 가지면 참이 됨.

      - src net <net> : 패킷의 송신지 필드에 있는 IP 주소가 <net>가 일치하는 네트워

        크 번호를 가지면 참이 됨.

      - net <net> : 패킷의 송신지 또는 목적지 필드에 있는 IP 주소가 <net>가 일치하는

        네트워크 번호를 가지면 참이 됨.

      - net <net> mask <mask> : IP 주소가 지정된 netmask를 통하여 네트워크 번호가

        <net>과 일치하면 참이 됨.

      - net <net>/<len> : IP 주소가 네트워크 번호 <net> netmask <len> 비트만큼

        일치하면 참이 됨.

      - dst port <port> : 패킷이 ip/tcp 혹은 ip/udp 이면서 목적지 port 값으로 <port>

        가지고 있으면 참이 됨. <port>는 숫자나 /etc/services 파일에 있는 포트 이름을

        사용할 수 있음.

      - src port <port> : 패킷이 ip/tcp 혹은 ip/udp 이면서 송신지 port 값으로 <port>

        가지고 있으면 참이 됨.

      - port <port> : 패킷이 ip/tcp 혹은 ip/udp 이면서 송신지나 목적지 port 값으로

        <port>를 가지고 있으면 참이 됨.

      - less <length> : 패킷의 길이가 <length> 바이트 보다 작거나 같으면 참이 됨.

      - greater <length> : 패킷의 길이가 <length> 바이트 보다 크면 참이 됨.

      - ip proto <protocol> : 패킷이 <protocol> 형태의 ip 패킷이면 참이 됨. 여기서

        icmp, igrp, udp, tcp 등의 이름을 적을 수 있음. , tcp, udp, icmp는 키 워드로도

        사용되므로 항상 ‘\’를 적어야 됨.

        ) #tcpdump ip proto \\tcp

      - ether broadcast : 패킷이 이더넷 방송 패킷이면 참이 됨.

      - ip broadcast : 패킷이 ip 방송 패킷이면 참이 됨.

      - ether multicast : 패킷이 이더넷 multicast 패킷이면 참이 됨.

      - ip multicast : 패킷이 ip multicast 패킷이면 참이 됨.

      - ether proto <protocol> : 이더넷 패킷의 프로토콜이 <protocol> 형태면 참이 됨.

        여기의 프로토콜로는 ip, arp, rarp 등이 있음.

      - 간단한 expression

        ? !, not

        ? &&, and

        ? ||, or

 

○ 사용 예

   ▷ 패킷의 발신지가 apple이고 목적지는 banana가 아닌 패킷을 수집

      # tcpdump src host apple and not dst host banana

 

   echo request/reply가 아닌 모든 ICMP 패킷을 출력

      # tcpdump 'icmp[0] != 8 and icmp[0] != 0'

[출처] 와룡의 네트워크 강좌 - http://cafe.naver.com/netsmaster.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=15732

Posted by @dmin @dmin

댓글을 달아 주세요