[root@FC10VM /]# tcpdump -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 20:10:39.390154 IP 192.168.58.129.ssh > 192.168.58.1.ncpm-hip: P 972341137:972341253(116) ack 2298354861 win 10704 20:10:39.397734 IP 192.168.58.1.ncpm-hip > 192.168.58.129.ssh: . ack 116 win 6483(116) ack 2298354861 win 10704 . . . |
[표 1]
덤프내용을 엄청난 라인에 텍스트들로 지나가게 됩니다. 너무빨리 지나가기 때문에 어떤 패킷이 어떤 패킷인지 알아볼 수 없기 때문에 덤프뜬 내용을 파일화 할 수 있습니다. "-i"옵션은 장치명을 지정하기 위해 사용됩니다.
[root@FC10VM /]# tcpdump -i eth0 -w tcpdump.log tcpdump: listening on eth0, link-type EN10MB(Ethernet), capture size 96 bytes ^C7 packets captured 9 packets received by filter 0 packets dropped by kernel |
[표 2]
파일화를 중단하고 싶을때 ^C(Ctrl + C)를 눌러 중단하면 덤프한 패킷의 정보가 간단하게 나옵니다. 만약 이 파일을 strings명령어나 cat명령어로 읽어보면 다음과 같은 화면은 만나실지도 모릅니다.
[그림 1. cat tcpdump.log]
[그림 2. strings tcpdump.log]
이런일을 미연에 방지해 보고자 file 명령어로 파일을 확인해 보면
[root@FC10VM /]# file tcpdump.log tcpdump.log: tcpdump capture file (little-endia) - version 2.4 (Ethernet, capture length 96) |
[표 3]
위와같이 tcpdump의 capture파일이라고 나오게 됩니다. 이말은 tcpdump로 읽어봐야 한다는 말입니다. 그래서 tcpdump로 읽어보도록 하겠습니다.
[root@FC10VM /]# tcpdump -r tcpdump.log reading from file tcpdump.log, link-type EN10MB (Ethernet) 20:15:45.137596 IP 192.168.58.129.ssh > 192.168.58.1.ncpm-hip: P 972393857:972393909(52) ack 2298357693 win 10704 20:15:45.137614 IP 192.168.58.1.ncpm-hip > 192.168.58.129.ssh: . ack 52 win 64183 . . . |
[표 4]
그러면 tcpdump.log파일에 내용이 저상적으로 보이는대 단순하게 ASCII로 읽어들인 헤더 정보일뿐 특별한 의미가 잇어 보이지는 않습니다. 때문에 옵션을 -Xqnr로 바꿔서 입력해 보도록 하겠습니다. 색다른 화면을 만나게 됩니다.
[root@FC10VM /]# tcpdump -Xqnr tcpdump.log reading from file tcpdump.log, link-type EN10MB (Ethernet) 20:15:45.137596 IP 192.168.85.129.ssh > 192.168.58.1.ncpm-hip: tcp 52 0x0000: 4510 005c bb45b4000 4006 8973 c0a8 3a81 E..\.E@.@..s..:. 0x0010: c0a8 3a01 0016 0693 39f5 8d81 88fe 27bd ..:.....9.....'. . . . |
[표 5]
[그림 3. -Xqnr tcpdump.log]
"-r" 옵션으로 단순하게 ASCII로 패킷의 헤더정보만 읽어오는 반면 -Xqnr옵션은 덤프된 내용을 HEX형식으로 보여주게 됩니다. 이번에는 좀더 세부적인 옵션을 줘서 패킷을 덤프하도록 하겠습니다.
[root@FC10VM /]# tcpdump -w tcpdump.log -s 1500 tcp port 22 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes ^C156 packets captured 158 packets received by filter 0 packets dropped by kernel |
[표 6]
이 옵션을 주지않으면 표 1번에 세번째 줄과 표 2번에 두번째 줄과 같이 다른 값으로 덤프됩니다.
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
"tcp port 22" 옵션은 덤프할 대상의 포트(프로토콜)를 지정한 것으로 tcp 22번 포트로 송수신되는 데이터를 덤프하게 됩니다. 포트외에 호스트도 지정이 가능하며(host 192.168.58.129) 호스트와 포트를 같이 지정해 덤프를 할수도 있습니다.(tcp port 22 and host 192.168.58.129)
"-c 10" 옵션은 사용되지 않았지만 사용할 경우 덤프할패킷의 겟수를 지정하기 때문에 처음과 같이 끝도없이 내려가는 텍스트를 만나지 않고 10개가 덤프된 화면을 보실 수 있습니다.
옵션 | 설명 |
-a | Network & Broadcast 주소들을 이름으로 바꿉니다. |
-b protocol | 지정된 Data Link 계층의 프로토콜을 사용하는 패킷을 덤프합니다. ip, ipv6, arp, rarp, ipx, x.25, 802.2 등이 있습니다. |
-d | Packet-matching code를 쉽게 읽을 수 있도록 표준 출력으로 출력합니다. |
-dd | Packet-matching code를 C program의 일부로 출력합니다. |
-ddd | Packet-matching code를 숫자로 출력합니다. |
-e | Link-Level 헤더를 출력합니다. |
-f | |
-F file | 필터 표현의 입력으로 지정한 파일을 받아들입니다. |
-l | Line buffering합니다. 즉 다른 프로그램에서 tcpdump에 데이터를 받고자 할때 유용합니다. |
-n | DNS주소로 번역하지 않습니다.(포트 등) |
-N | 호스트 이름 출력시 도메인을 출력하지 않습니다. |
-O | Packet-matching code optimizer를 실행하지 않습니다. |
-p | 인터페이스를 Promiscuous mode로 두지 않습니다. |
-q | 프로토콜 정보를 일부 생략하여 출력합니다. 때문에 라인이 좀 짧아집니다. |
-T type | 명시된 형식으로 표시하게 됩니다. 명시된 형식은 다음과 같습니다. rpc : Remote Procedure Call rtp : Real-Time Applications Protocol rtcp : Real-Time Application Control Protocol vat : Visual Audio Tool wb : distributed White Board |
-S | TCP sequence번호를 상대번호가 아닌 절대번호로 출력합니다. |
-t | 시간출력을 생략합니다. |
-tt | 형식이 없는 시간을 출력합니다. |
-v | (Verbose)좀더 자세한 덤프정보가 출력됩니다. |
-vv | -v보다 자세한 덤프정보가 출력됩니다. |
-x | -X일 경우 HEX값을 ASCII코드로 보여주지만 -x일 경우 HEX값만 보여지게 됩니다. |
[표 7. tcpdump에 다른 옵션들]
- Maximum Transmission Unit : 물리적 전송매체에서 전송 가능한 데이터의 최대 단위를 말하는 것으로 최대값은 1500입니다. 단위는 Byte단위 이며 이보다 큰 파일은 MTU사이즈에 맞게 잘라서 보내게 됩니다. [본문으로]