[펌] tcpdump
os/Linux 2004. 11. 3. 16:33 |- 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 -l -vvv -x -X > tcpdat & tail -f tcpdat
사용법 | ||||
| ||||
| ||||
<Option> | ||||
| ||||
| ||||
| ||||
| ||||
<exulssion> | ||||
exulssion은 패킷을 선택적으로 캡처하기 위한 조건을 적는 부분이다. exulssion이 없다면 | ||||
Qualifier | ||||
ex) " host foo", "net 123.4", "port 23" 특별한 qualifier가 정해져 있지 않으면 "host"로 가정한다. dir : 전송방향을 결정한다. 가능한 방향은 "src", "dst", "src or dst", "src and dst"이다 ex) "src foo", "dst net 123.4", "src or dst port ftp" 특별한 qualifier가 정해져 있지 않으면 "src or dst"로 가정한다. proto : 특정한 프로토콜의 패킷만을 받아들이게 한다. 가능한 proto로는 "either", "fddi", "ip" ,"arp", "rarp", "decnet", "lat", "sca", "moprd", "mopdl", "tcp","udp"가 있다. ex) "either src foo", "arp net 123.4", "tcp port 23" 특별한 qualifier가 정해져 있지 않으면 "src or dst"로 가정한다. | ||||
| ||||
primitives | ||||
dst host <host> : 패킷의목적지 필드에 있는 IP주소와 <host> (hostname, name | ||||
src host <host> : 패킷의 발신지 필드에 있는 IP주소와 <host> (hostname, name | ||||
host <host> : 패킷의 목적지 IP나 발싲니 IP중 어느하나라도 <host>와 일치하면 참. | ||||
ether dst <ehost> : 패킷의 목적지 ethernet 주소(48bit의 주소로 일반적으로 X:X:X:X:X;X로 표시된다.여기서 X는 16진수)가<ehost>와 일치하면 참. | ||||
ether dst <ehost> : 패킷의 목적지 ethernet 주소가 <ehost>와 일치하면 참. | ||||
gateway <ehost> : <host>가 gateway로 쓰일 때 참. 즉, ethernet발신지 혹은 목적지 | ||||
dst net <net> : 패킷의 IP목적지 주소가 <net>과 | ||||
src net <net> : 패킷의 IP발신지 주소가 <net>과 | ||||
net <net> : 패킷이 IP목적지 혹은 발신지 주소 둘 중 어느 하나라도 <net>과 | ||||
net <net> mask <mask> : IP주소가 지정된 netmask(<mask>)를 통하여 | ||||
net <net>/<len> : IP주소가 network number <net>과 netmaks의 <len>비트만큼 | ||||
dst port <port> : 패킷이 IP혹은 UDP 이면서 목적지 port값으로 <port>를 가지고 있다면 참. <port>는 숫자나 /etc/services에 정의 되어있는 port이름을 | ||||
src port <port> : 패킷이 IP혹은 UDP 이면서 발신지 port값으로 <port>를 가지고 있다면 참. | ||||
port <port> : 패킷의 목적지 혹은 발신지 port값에서 둘주 어느하나라도 <port>와 같으면 | ||||
less <length> : 패킷의 길이가 <length>Byte보다 작거나 같으면 참이된다. | ||||
greater <length> : 패킷의 길이가 <length>Byte보다 크거나 같으면 참이된다. | ||||
ip proto <protocol> : 패킷이 <protocol> protocol형태의 ip패킷이면 참. | ||||
ether broadcast : 패킷이 ethernet broadcast패킷이면 참. "ehter" keyword는 생략 가능. | ||||
ip broadcast : 패킷이 ip broadcast패킷이면 참. | ||||
ether multicast : 패킷이 ethernet multicast 패킷이면 참이된다. | ||||
ip multicast : 패킷이 ip multicast패팃이면 참. | ||||
ether proto <protocol> : 패킷이 <protocol>의 ether형태라면 참. | ||||
decnet src <host> : DECNET발신지 주소가 <host>이면 참이 된다. | ||||
decnet dst <host> : DECNET목적지 주소가 <host>이면 참. | ||||
decnet host <host> : DECNET목적지혹은 발신지 주소중에서 어느 하나라도 | ||||
ip, arp, rarp, decnet : "ether proto <p>"의 축약형이다. | ||||
tcp, udp, icmp : "ip proto <p>"의 축약형이다. 여기서 <p>값은 위의 protocol중 하나가된다. | ||||
| ||||
간단한 exulssion들을 다음의 관계연산자를 통하여 묶음으로서 더욱 복잡한 filter exulssion을 구성할 수 있다. * Nagation : "!", "not" | ||||
| ||||
| ||||
tcp_dump의 사용 | ||||
| ||||
| ||||
Example 1
2. 패킷의 수신지 혹은 발신지가apple 인 것을 출력한다. 3. 패킷의 수신지 혹은 발신지가 sun이나 moon이면 출력하지 않는다.
Example 2
FIN 패킷을 출력한다
|
TCP 플래그 | tcpdump에서 쓰는 플래그 | 플래그의 의미 |
SYN | s | Syn 패킷, 접속요청을 할 때 보낸다. TCP 접속을 할 때 가장 먼저 보내는 패킷이다. |
ACK | ack | Ack 패킷, 상대방으로부터 패킷을 받았음을 알려주기 위해 보낸다. 다른 플래그와 함께 출력되는 경우도 있다. |
FIN | f | 접속 종료를 위한 플래그로, 이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 접속을 끊고자 할 때 사용한다. |
RESET | r | 이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용한다. |
PUSH | p | 데이터를 즉시 목적지로 보내라는 의미이다. 텔넷(telnet)과 같이 상호작용이 중요한 프로그램의 경우, 빠른 응답이 생명이다. 그래서 "push" 플래그를 사용한다. |
URGENT | urg | 긴급한 데이터는 다른 데이터에 비해 우선 순위가 높아야 한다. 예를 들어 ftp로 자료를 받고 있는 도중 Ctrl-C를 받으면 즉시 자료 받기를 중단해야 한다. |
Placeholder | . | 패킷이 syn, finish, reset, push 등의 플래그가 없는 경우, placefolder 플래그가 세팅된다. 이 플래그는 ack 플래그와 함께 사용되는 경우도 있다. |