tcpdump 명령어는 어떻게 사용하나요?
💡 요약 정리
- tcpdump는 리눅스에서 패킷을 캡쳐할 수 있는 명령어입니다.
- 기본 설치되어 있으며 추가 설치는 필요 없습니다.
- IP 주소나 포트를 기준으로 필터링이 가능하고, 파일로 저장도 가능합니다.
- 다양한 옵션을 활용해 필요한 패킷을 선택적으로 수집할 수 있습니다.
- CentOS 5.x (64bit)에서 테스트된 예시입니다.
1. 설치 환경
- CentOS 5.x (64bit)
2. tcpdump 명령어 개요
- tcpdump는 서버에서 송수신되는 패킷을 캡쳐하는 프로그램입니다.
- 대부분의 리눅스 배포판에는 기본 패키지로 설치되어 있으므로 별도 설치가 필요 없습니다.
- 공식 사이트: http://www.tcpdump.org/
3. tcpdump 명령어 활용 예제
① eth0 인터페이스에서 tcp 80번 포트로 통신하는 패킷 덤프
[root@cafe24 ~]# tcpdump -i eth0 tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
09:58:07.654263 IP 123.x.x.x.6535 > 1.234.20.101.http: S 3713818146:3713818146(0) win 8192 <mss 1460,no
p,wscale 2,nop,nop,sackOK>
09:58:07.667342 IP 1.234.20.101.http > 123.x.x.x.6535: S 4024161954:4024161954(0) ack 3713818147 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 7>
09:58:07.660988 IP 123.x.x.x.6535 > 1.x.x.x.http: . ack 1 win 16425
09:58:07.661285 IP 123.x.x.x.6535 > 1.x.x.x.http: P 1:308(307) ack 1 win 16425
09:58:07.661309 IP 1.x.x.x.http > 123.x.x.x.6535: . ack 308 win 54
09:58:07.663291 IP 1.x.x.x.http > 123.x.x.x.6535: P 1:316(315) ack 308 win 54
09:58:07.864386 IP 123.x.x.x.6535 > 1.234.20.101.http: . ack 316 win 16346
[root@cafe24 ~]#
② 소스 IP 기준 패킷 덤프 (예: 123.x.x.x)
[root@cafe24 ~]# tcpdump -i eth0 src 123.x.x.x
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:02:25.325492 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 994977889 win 3807
10:02:25.340124 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 249 win 3745
10:02:25.550305 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 381 win 4096
10:02:25.760214 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 513 win 4063
10:02:25.970330 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 645 win 4030
10:02:26.176228 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 777 win 3997
10:02:26.386295 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 909 win 3964
10:02:26.590324 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 1041 win 3931
10:02:26.797317 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 1173 win 3898
10:02:27.011278 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 1305 win 3865
10:02:27.216273 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 1437 win 3832
10:02:27.421418 IP 123.x.x.x.9258 > 123.x.x.x.ssh: . ack 1569 win 3799
10:02:27.428213 IP 123.x.x.x.9258 > 123.x.x.x.ssh: P 0:52(52) ack 1701 win 3766
13 packets captured
13 packets received by filter
0 packets dropped by kernel
[root@cafe24 ~]#
③ 목적지 IP 기준 패킷 덤프
[root@cafe24 ~]# tcpdump -i eth0 dst 123.x.x.x
10:05:18.355962 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 390200:390348(148) ack 6345 win 230
10:05:18.356017 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 390348:390496(148) ack 6345 win 230
10:05:18.356074 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 390496:390644(148) ack 6345 win 230
10:05:18.356125 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 390644:390792(148) ack 6345 win 230
10:05:18.356182 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 390792:390940(148) ack 6345 win 230
10:05:18.356236 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 390940:391088(148) ack 6345 win 230
10:05:18.356291 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 391088:391236(148) ack 6345 win 230
10:05:18.356341 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 391236:391384(148) ack 6345 win 230
10:05:18.356397 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 391384:391532(148) ack 6345 win 230
10:05:18.356452 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 391532:391680(148) ack 6345 win 230
10:05:18.368319 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 400920:401052(132) ack 6501 win 230
④ 지정 호스트를 기준으로 모든 통신 패킷 덤프
[root@cafe24 ~]# tcpdump host 123.x.x.x
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
12:59:59.319280 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 997682809:997683005(196) ack 1387613547 win 440
12:59:59.325354 IP 123.x.x.x.9258 > 1.x.x.x.ssh: . ack 196 win 4000
12:59:59.332383 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 196:360(164) ack 1 win 440
12:59:59.332485 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 360:492(132) ack 1 win 440
12:59:59.332531 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 492:624(132) ack 1 win 440
12:59:59.339341 IP 123.x.x.x.9258 > 1.x.x.x.ssh: . ack 492 win 3926
12:59:59.339357 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 624:888(264) ack 1 win 440
12:59:59.339486 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 888:1020(132) ack 1 win 440
12:59:59.339534 IP 1.x.x.x.ssh > 123.x.x.x.9258: P 1020:1152(132) ack 1 win 440
[root@cafe24 ~]#
⑤ and 옵션을 통해 조건 조합 (목적지 IP가 123.x.x.x이며, tcp http 조건 만족)
[root@cafe24 ~]# tcpdump -i eth0 dst 123.x.x.x and tcp and port http
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:09:43.914440 IP 1.x.x.x.http > 123.x.x.x.7840: S 463724349:463724349(0) ack 1046510772 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 7>
10:09:43.924132 IP 1.x.x.x.http > 123.x.x.x.7840: . ack 334 win 54
10:09:43.926433 IP 1.x.x.x.http > 123.x.x.x.7840: P 1:316(315) ack 334 win 54
10:09:46.576835 IP 1.x.x.x.http > 123.x.x.x.7840: P 316:630(314) ack 667 win 63
10:09:47.994985 IP 1.x.x.x.http > 123.x.x.x.7840: P 630:944(314) ack 1000 win 71
10:09:48.169001 IP 1.x.x.x.http > 123.x.x.x.7840: P 944:1258(314) ack 1333 win 80
10:09:48.345069 IP 1.x.x.x.http > 123.x.x.x.7840: P 1258:1572(314) ack 1666 win 88
10:09:48.496904 IP 1.x.x.x.http > 123.x.x.x.7840: P 1572:1886(314) ack 1999 win 96
8 packets captured
8 packets received by filter
0 packets dropped by kernel
[root@cafe24 ~]#
⑥ 덤프 내용을 파일로 저장 및 읽기 (-w, -r 옵션)
[root@cafe24 ~]# tcpdump -w tcpdump.log -i eth0 dst 123.x.x.x and tcp and port http
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
8 packets captured
8 packets received by filter
0 packets dropped by kernel
[root@cafe24 ~]# tcpdump -r tcpdump.log
reading from file tcpdump.log, link-type EN10MB (Ethernet)
12:54:27.527448 IP 1.x.x.x.http > 123.x.x.x.2224: S 2312568941:2312568941(0) ack 3395268568 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 7>
12:54:27.533604 IP 1.x.x.x.http > 123.x.x.x.2224: . ack 308 win 54
12:54:27.535949 IP 1.x.x.x.http > 123.x.x.x.2224: P 1:316(315) ack 308 win 54
12:54:28.917936 IP 1.x.x.x.http > 123.x.x.x.2224: P 316:630(314) ack 641 win 63
12:54:29.083194 IP 1.x.x.x.http > 123.x.x.x.2224: P 630:944(314) ack 974 win 71
12:54:29.251077 IP 1.x.x.x.http > 123.x.x.x.2224: P 944:1258(314) ack 1307 win 80
12:54:29.420280 IP 1.x.x.x.http > 123.x.x.x.2224: P 1258:1572(314) ack 1640 win 88
12:54:29.540205 IP 1.x.x.x.http > 123.x.x.x.2224: P 1572:1886(314) ack 1973 win 96
[root@cafe24 ~]#
4. 기타 옵션 정리
-A: ASCII 형태로 패킷 내용을 출력합니다.-B: 버퍼 크기를 조절합니다.-c: 지정한 수 만큼의 패킷 수집 후 종료합니다.-C: 저장 파일의 최대 크기를 설정하고, 초과 시 새로운 파일 생성합니다.-d: 필터드 코드를 사람이 읽을 수 있는 형식으로 출력하고 종료합니다.-dd: C언어 형태의 packet-matching 코드 출력-ddd: 십진수 형태로 packet-matching 코드 출력-D: 사용 가능한 네트워크 인터페이스 목록을 보여줍니다.-e: 링크 레벨 헤더를 출력합니다.-f: IP 주소를 숫자 형태로 출력합니다.-F: 필터식이 포함된 파일을 입력으로 사용합니다.-G: 지정된 시간 단위로 파일 이름을 회전시켜 저장합니다.-i: 캡처할 네트워크 인터페이스 지정-I: monitor mode 설정 (802.11 무선 네트워크 전용)