본문 바로가기
  • AI (Artificial Intelligence)
Skills/Network

TCPDUMP 옵션 및 사용법

by 로샤스 2014. 7. 7.

Tcpdump는 리눅스에서 제공하는 패킷 분석 툴로써 주어진 조건식을 만족하는 네트워크 인터페이스를 거치는 패킷들의 헤더들을 출력해 주는 프로그램이다.


1 Tcpdump의 사용 옵션들

o         -a : Network & Broadcast 주소들을 이름들로 바꾼다.

o         -c Number : 제시된 수의 패킷을 받은 후 종료한다.

o         -d : compile된 packet-matching code를 사람이 읽을 수 있도록 바꾸어 표준 출력으로 출력하고, 종료한다.

o         -dd : packet-matching code를 C program의 일부로 출력한다.

o         -ddd : packet-matching code를 숫자로 출력한다.

o         -e : 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다.

o         -f : 외부의 internet address를 가급적 심볼로 출력한다(Sun의 yp server와의 사용은 가급적 피하자).

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

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

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

o         -n : 모든 주소들을 번역하지 않는다(port,host address 등등)

o         -N : 호스트 이름을 출력할 때, 도메인을 찍지 않는다.

o         -O : packet-matching code optimizer를 실행하지 않는다. 이 옵션은 optimizer에 있는 버그를 찾을 때나 쓰인다.

o         -p : 인터페이스를 promiscuous mode로 두지 않는다.

o         -q : 프로토콜에 대한 정보를 덜 출력한다. 따라서 출력되는 라인이 좀 더 짧아진다.

o         -r file : 패킷들을 '-w'옵션으로 만들어진 파일로 부터 읽어 들인다. 파일에 "-" 가 사용되면 표준 입력을 통해서 받아들인다.

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

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

o         -S : TCP sequence번호를 상대적인 번호가 아닌 절대적인 번호로 출력한다.

o         -t : 출력되는 각각의 라인에 시간을 출력하지 않는다.

o         -tt : 출력되는 각각의 라인에 형식이 없는 시간들을 출력한다.

o         -v : 좀 더 많은 정보들을 출력한다.

o         -vv : '-v'보다 좀 더 많은 정보들을 출력한다.

o         -w : 캡춰한 패킷들을 분석해서 출력하는 대신에 그대로 파일에 저장한다.

o         -x : 각각의 패킷을 헥사 코드로 출력한다.

o         –xxx : 각각의 패킷에 대해 –x 보다 좀더 자세하게 헥사 코드로 출력한다.

 

2 Tcpdump 조건식(expression)

o         옵션의 제일 마지막인 조건식은 어떤 패킷들을 출력할지를 선택하는데 쓰인다. 조건식이 주어지지 않는 다면 모든 패킷들이 그 대상이 될 것이다. 일단 주어지면, 아무리 패킷들이 많아도 조 건식에 부합하는 패킷만을 출력한다.

o         조건식들은 하나 또는 몇 개의 primitive들로 구성되어 있다. primitive들은 보통 하나 혹은 몇개의 qualifier들 다음에 오는 하나의 값으로 이루어진다. Qualifier들은 모두 3 종류이며 다음과 같다.

-    type : 주어진 값의 종류가 무엇인지를 나타낸다. 가능한 type들은 'host', 'net', 'port'가 있다. type이 없는 값들은 type을 host라 가정한다.

-    dir : id로 부터의 어떤 특정한 전송 방향을 나타낸다. 가능한 방향은 'src', 'dst', 'src or dst', 'src and dst'이다. 만약 방향이 정해지지 않았다면, src or dst라 가정한다. "For `null' link layers (i.e. point to point protocols such as slip) the in bound and out bound qualifiers can be used to specify a desired direction."

-    proto : 매칭을 특정 프로토콜에 한해서 수행한다. 가능한 프로토콜들은 ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp, udp이다. 만약 프로토콜이 명시되지 않았다면, 해당하는 값의 type에 관련된 모든 프로토콜들이 그 대상이 된다.

이 밖에도 위의 패턴을 따르지 않는 Primitive들이 존재한다(gateway, broadcast, less, greater, 산술식).

-    좀 더 정교한 조건식들을 사용하려면, 'and(&&)', 'or(||)', 'not(!)'들을 사용하여 여러 primitive들을 연결하면 된다. 같은 표현들은 생략될 수 있다.

 

1.3 사용 가능한 Primitive

o         ether broadcast : 패킷이 ethernet broadcast 패킷일때 출력.
ether는 생략 가능하다

*# tcpdump ether broadcast.

o         ip broadcast : 패킷이 IP broadcast 패킷일때 출력. 
     *# tcpdump -i any ip broadcast

o         ether multicast : 패킷이 ether multicast 패킷일때 출력.

          *# tcpdump ether multicast

o         dst host HOST : packet의 IP destination 항목이  HOST 패킷일때출력.
    
*# tcpdump -i any dst host 10.10.10.1

o         src host HOST : packet의 IP source항목이 HOST패킷일때출력.
     *# tcpdump -i any src host 10.10.10.1

o         host HOST : IP source, IP destination 항목 중 어느 하나라도 HOST 패킷일때 출력.

*# tcpdump -i any host 10.10.10.1

o         ether dst ehost : ethernet destination 주소가 ehost패킷일때 출력.

*# tcpdump -i eth01 ether dst 00:00:00:00:00:00

o         ether src ehost : ethernet source 주소가 ehost패킷일때 출력.

*# tcpdump -i eth01 ether src 00:00:00:00:00:00

o         ether host ehost : ethernet source, destination 항목들 중 어느 하나라도 ehost패킷일때 출력.
     
*# tcpdump -i eth01 ether host 00:00:00:00:00:00

o         dst port PORT : 패킷이 ip/tcp, ip/udp 프로토콜의 패킷이고 destination port의 값이 PORT일 때 참이다. port는 /etc/services에 명시된 이름일 수도 있고 그냥 숫자일 수도 있다. 만약 이름이 사용됐다면 port 번호와 프로토콜이 같이 체크될 것이다. 만약 숫자나 불 확실한 이름이 사용됐을 경우에는 port 번호만이 체크될 것이다.

*# tcpdump -i any src port 23

o         src port PORT : 패킷의 source port의 값으로 PORT를 가지면        *# tcpdump -i any dst port 23

o         port PORT : 패킷의 source, destination port 중에 하나라도 PORT이면 참이다.

*# tcpdump -i any port 23

o         ip proto protocol : 패킷이 지정된 종류의 프로토콜의 ip 패킷이면 참이다. Protocol은 icmp, igmp, udp, nd, tcp 중의 하나 혹은 몇 개가 될 수 있다. 주의할 점은 tcp, udp, icmp들은 '\'로 escape되어야 한다.

*# tcpdump -i any icmp

*# tcpdump -i br1 tcp

*# tcpdump -i br1 udp

o         ether proto protocol : 패킷이 ether type의 protocol이라면 참이다. protocol은 ip, arp, rarp 중에 하나 혹은 몇개가 될 수 있다. ip proto protocol에서와 마찬가지로 ip, arp, rarp는 escape 되어야 한다.

       *# tcpdump -i eth01 icmp

 

 















출처 : http://skysomeone.tistory.com/entry/TCPDUMP-%EC%98%B5%EC%85%98-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95













'Skills > Network' 카테고리의 다른 글

iptables 설정 [NAT]  (0) 2014.07.14
Iptables  (0) 2014.07.09
네트워크 관련지식 (재정리를 위해 참고)  (0) 2014.05.22
Ping으로 목적지의 OS 알아보기  (0) 2014.05.22
Promiscuous Mode  (0) 2014.05.22

댓글