tcpdump監聽網絡流量


一、命令詳解

   tcpdump命令是一個截獲網絡數據包的包分析工具。tcpdump可以將網絡中傳送的數據包的""完全截獲下來以提供分析。它支持針對網絡層、協議層、主機、端口等的過濾,並支持與、或、非邏輯語句協助過濾有效信息。
  tcpdump命令工作時要先把網卡的工作模式切換到混雜模式(promiscuous mode)。因為要修改網絡接口的工作模式。所以tcpdump命令需要以root的身份運行。

語法格式:

tcpdump  [option]  [expression]
tcpdump  [選項]  [表達式]

說明:

在tcpdump命令及后面的選項和表達式里,每個元素之間都至少要有一個空格。

選項說明

參數選項 解釋說明(帶*的為重點)
-A

以ASCII碼的方式顯示每一個數據包(不會顯示數據包中的鏈路層的頭部嘻嘻)。在抓取包含網頁數據的數據包時,可方便查看數據

-c <數據包數目> 接收到指定的數據包數目后退出命令
-e 每行的打印輸出中將包括數據包的數據鏈路層頭部信息
-i <網絡接口> 指定要監聽數據包的網絡接口*
-n 不進行DNS解析,加快顯示速度*
-nn 不將協議和端口數字等轉換成名字*
-q 以快速輸出的方式運行,此選項僅顯示數據包的協議概要信息,輸出信息較短*
-s <數據包大小> 設置數據包抓取長度,如果不設置則默認為68字節,設置為0則自動選擇合適長度來抓取數據包
-t 在每行輸出信息中不顯示時間戳標記
-tt 在每行輸出信息匯總不顯示無格式的時間戳標記
-ttt 顯示當前行與前一行的延遲
-tttt 在每行打印的時間戳之前添加日志
-ttttt 顯示當前行與第一行的延遲
-v 顯示命令執行的詳細信息
-vv 顯示比-v選項更佳詳細的信息
-vvv 顯示比-vv選項更加詳細的輸出

tcpdump命令安裝

yum -y install tcpdump

二、使用范例

示例一、不加參數運行tcpdump命令監聽網絡

[root@localhost /]# tcpdump          #<==默認情況下,直接啟動tcpdump將監視第一個網絡接口上所以流過的數據包
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:35:03.112228 IP 192.168.121.129.ssh > 192.168.121.1.51078: Flags [P.], seq 2923122276:2923122460, ack 3597148564, win 585, options [nop,nop,TS val 5261893 ecr 1045340817], length 184
14:35:03.112347 IP 192.168.121.1.51078 > 192.168.121.129.ssh: Flags [.], ack 184, win 4090, options [nop,nop,TS val 1045340914 ecr 5261893], length 0
14:35:03.112605 IP 192.168.121.129.50800 > 192.168.121.2.domain: 43519+ PTR? 1.121.168.192.in-addr.arpa. (44)
14:35:03.125630 ARP, Request who-has 192.168.121.129 tell 192.168.121.2, length 46
14:35:03.125638 ARP, Reply 192.168.121.129 is-at 00:0c:29:63:29:db (oui Unknown), length 28
14:35:03.125690 IP 192.168.121.2.domain > 192.168.121.129.50800: 43519 NXDomain*- 0/0/0 (44)
14:35:03.125817 IP 192.168.121.129.57593 > 192.168.121.2.domain: 48319+ PTR? 129.121.168.192.in-addr.arpa. (46)
14:35:03.165269 IP 192.168.121.2.domain > 192.168.121.129.57593: 48319 NXDomain*- 0/0/0 (46)
14:35:03.165625 IP 192.168.121.129.35799 > 192.168.121.2.domain: 26078+ PTR? 2.121.168.192.in-addr.arpa. (44)
14:35:03.166321 IP 192.168.121.129.ssh > 192.168.121.1.51078: Flags [P.], seq 184:560, ack 1, win 585, options [nop,nop,TS val 5261947 ecr 1045340914], length 376
14:35:03.166562 IP 192.168.121.1.51078 > 192.168.121.129.ssh: Flags [.], ack 560, win 4084, options [nop,nop,TS val 1045340967 ecr 5261947], length 0
14:35:03.178026 IP 192.168.121.2.domain > 192.168.121.129.35799: 26078 NXDomain*- 0/0/0 (44)
14:35:03.179413 IP 192.168.121.129.ssh > 192.168.121.1.51078: Flags [P.], seq 560:1704, ack 1, win 585, options [nop,nop,TS val 5261960 ecr 1045340967], length 1144
14:35:03.179594 IP 192.168.121.1.51078 > 192.168.121.129.ssh: Flags [.], ack 1704, win 4060, options [nop,nop,TS val 1045340980 ecr 5261960], length 0
^C
97 packets captured
97 packets received by filter
0 packets dropped by kernel

使用tcpdump命令時,如果不輸入過來規則,則輸出的數據量將會很大。

示例二:精簡輸出信息

[root@localhost /]# tcpdump -q        #<==默認情況下,tcpdump命令的輸出信息較多,為了顯示精簡的信息,可以使用-q選項
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:38:26.706220 IP 192.168.121.129.ssh > 192.168.121.1.51078: tcp 184
14:38:26.706323 IP 192.168.121.1.51078 > 192.168.121.129.ssh: tcp 0
14:38:26.706655 IP 192.168.121.129.51379 > 192.168.121.2.domain: UDP, length 44
14:38:26.720091 IP 192.168.121.2.domain > 192.168.121.129.51379: UDP, length 44
14:38:26.720449 IP 192.168.121.129.43737 > 192.168.121.2.domain: UDP, length 46
14:38:26.753629 IP 192.168.121.2.domain > 192.168.121.129.43737: UDP, length 46
14:38:26.753879 IP 192.168.121.129.41780 > 192.168.121.2.domain: UDP, length 44
14:38:26.754338 IP 192.168.121.129.ssh > 192.168.121.1.51078: tcp 168
14:38:26.754564 IP 192.168.121.1.51078 > 192.168.121.129.ssh: tcp 0
14:38:26.766716 IP 192.168.121.2.domain > 192.168.121.129.41780: UDP, length 44
14:38:26.767268 IP 192.168.121.129.ssh > 192.168.121.1.51078: tcp 664
14:38:26.767547 IP 192.168.121.1.51078 > 192.168.121.129.ssh: tcp 0
14:38:26.768272 IP 192.168.121.129.ssh > 192.168.121.1.51078: tcp 168
14:38:26.768435 IP 192.168.121.1.51078 > 192.168.121.129.ssh: tcp 0
803 packets captured
803 packets received by filter
0 packets dropped by kernel


[root@localhost /]# tcpdump -c 5    #<==使用-c選項指定監聽的數據包數量,這樣就不需要使用Ctrl+C了。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:47:54.835455 IP 192.168.121.129.ssh > 192.168.121.1.51078: Flags [P.], seq 2924737100:2924737284, ack 3597158404, win 585, options [nop,nop,TS val 6033616 ecr 1046110972], length 184
14:47:54.835645 IP 192.168.121.1.51078 > 192.168.121.129.ssh: Flags [.], ack 184, win 4090, options [nop,nop,TS val 1046111182 ecr 6033616], length 0
14:47:54.836241 IP 192.168.121.129.52725 > 192.168.121.2.domain: 41821+ PTR? 1.121.168.192.in-addr.arpa. (44)
14:47:54.846751 ARP, Request who-has 192.168.121.129 tell 192.168.121.2, length 46
14:47:54.846765 ARP, Reply 192.168.121.129 is-at 00:0c:29:63:29:db (oui Unknown), length 28
5 packets captured
14 packets received by filter
0 packets dropped by kernel

示例三:監聽指定網卡收到的數據包

[root@localhost /]# tcpdump -i eth0        #<==使用-i選項可以指定要監聽的網卡
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:42:16.383512 IP 192.168.121.129.ssh > 192.168.121.1.51078: Flags [P.], seq 2924691140:2924691324, ack 3597156644, win 585, options [nop,nop,TS val 5695164 ecr 1045773040], length 184
14:42:16.383746 IP 192.168.121.1.51078 > 192.168.121.129.ssh: Flags [.], ack 184, win 4090, options [nop,nop,TS val 1045773052 ecr 5695164], length 0
14:42:16.384243 IP 192.168.121.129.47300 > 192.168.121.2.domain: 39880+ PTR? 1.121.168.192.in-addr.arpa. (44)
14:42:16.397463 IP 192.168.121.2.domain > 192.168.121.129.47300: 39880 NXDomain*- 0/0/0 (44)
14:42:16.397628 IP 192.168.121.129.49148 > 192.168.121.2.domain: 8740+ PTR? 129.121.168.192.in-addr.arpa. (46)
14:42:16.429776 IP 192.168.121.2.domain > 192.168.121.129.49148: 8740 NXDomain*- 0/0/0 (46)
14:42:16.430063 IP 192.168.121.129.48011 > 192.168.121.2.domain: 54037+ PTR? 2.121.168.192.in-addr.arpa. (44)
14:42:16.430268 IP 192.168.121.129.ssh > 192.168.121.1.51078: Flags [P.], seq 184:560, ack 1, win 585, options [nop,nop,TS val 5695211 ecr 1045773052], length 376
14:42:16.430475 IP 192.168.121.1.51078 > 192.168.121.129.ssh: Flags [.], ack 560, win 4084, options [nop,nop,TS val 1045773098 ecr 5695211], length 0
14:42:16.444533 IP 192.168.121.2.domain > 192.168.121.129.48011: 54037 NXDomain*- 0/0/0 (44)
14:42:16.445293 IP 192.168.121.129.ssh > 192.168.121.1.51078: Flags [P.], seq 560:1528, ack 1, win 585, options [nop,nop,TS val 5695226 ecr 1045773098], length 968
14:42:16.445427 IP 192.168.121.1.51078 > 192.168.121.129.ssh: Flags [.], ack 1528, win 4065, options [nop,nop,TS val 1045773113 ecr 5695226], length 0
^C
240 packets captured
240 packets received by filter
0 packets dropped by kernel

以下是命令結果。

14:42:16.383512:當前時間,精確到微秒。
IP 192.168.121.129.ssh > 192.168.121.1.51078:從主機192.168.121.129的SSH端口發送數據到192.168.121.1的51078端口,">" 代表數據流向。
Flags [P.]: TCP包中的標識信息,S是SYN標志的縮寫,F(FIN)、P(PUSH)、R(RST)、"."(沒有標記)。
seq:數據包粽的數據的順序號。
ack:下次期望的順序號。
win:接收緩存的窗口大小。
length:數據包的長度。

示例四:監聽指定主機的數據包

[root@localhost /]# tcpdump -n host 192.168.121.131        #<==使用-n選項不進行DNS解析,加快顯示速度。監聽指定主機的關鍵字為host,后面直接主機名或IP地址即可。本行命令的作用是監聽所有192.168.121.131的主機收到的和發出的數據包。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:59:08.905381 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [P.], seq 2947015398:2947015438, ack 4084885214, win 65535, length 40
14:59:08.907692 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 1:41, ack 40, win 25776, length 40
14:59:08.907701 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 41, win 65535, length 0
14:59:09.032865 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [P.], seq 40:80, ack 41, win 65535, length 40
14:59:09.034680 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 41:81, ack 80, win 25776, length 40
14:59:09.034687 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 81, win 65535, length 0
14:59:09.177312 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [P.], seq 80:120, ack 81, win 65535, length 40
14:59:09.179493 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 81:121, ack 120, win 25776, length 40
14:59:09.179500 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 121, win 65535, length 0
14:59:09.181494 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 121:1057, ack 120, win 25776, length 936
14:59:09.181501 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 1057, win 65535, length 0
^C
11 packets captured
11 packets received by filter
0 packets dropped by kernel


[root@localhost /]# tcpdump -n  src host 192.168.121.131       #<==只監聽從192.168.121.131發出的數據包,即源地址為192.168.121.131,關鍵字為src(source,源地址)。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:01:38.460558 ARP, Reply 192.168.121.131 is-at 00:0c:29:9e:a9:d7, length 46
15:01:38.462523 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 4084886270:4084886390, ack 2947015558, win 25776, length 120
15:01:38.874518 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 120:160, ack 41, win 25776, length 40
15:01:39.022528 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 160:200, ack 81, win 25776, length 40
15:01:39.148409 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 200:240, ack 121, win 25776, length 40
15:01:39.150529 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 240:1176, ack 121, win 25776, length 936
15:01:44.946040 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 1176:1216, ack 161, win 25776, length 40
15:01:45.087128 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 1216:1256, ack 201, win 25776, length 40
15:01:45.340033 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 1256:1296, ack 241, win 25776, length 40
15:01:45.528735 IP 192.168.121.131.ssh > 192.168.121.1.51626: Flags [P.], seq 1296:1432, ack 281, win 25776, length 136
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel




[root@localhost /]# tcpdump -n  dst host 192.168.121.131     #<==只監聽192.168.121.131收到的數據包,即目標地址為192.168.121.131,關鍵字為dst(destination,目的地)。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:03:54.869394 ARP, Request who-has 192.168.121.131 (00:0c:29:9e:a9:d7) tell 192.168.121.1, length 46
15:03:54.869408 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [P.], seq 2947015838:2947015878, ack 4084887702, win 65535, length 40
15:03:54.872671 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 121, win 65535, length 0
15:03:55.067330 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [P.], seq 40:80, ack 121, win 65535, length 40
15:03:55.069563 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 241, win 65535, length 0
15:03:55.364657 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [P.], seq 80:120, ack 241, win 65535, length 40
15:03:55.366673 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 281, win 65535, length 0
15:03:55.504578 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [P.], seq 120:160, ack 281, win 65535, length 40
15:03:55.506674 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 321, win 65535, length 0
15:03:55.642867 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [P.], seq 160:200, ack 321, win 65535, length 40
15:03:55.645251 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 361, win 65535, length 0
15:03:55.649562 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 1217, win 65535, length 0
15:03:55.650650 IP 192.168.121.1.51626 > 192.168.121.131.ssh: Flags [.], ack 1337, win 65535, length 0
^C
13 packets captured
13 packets received by filter
0 packets dropped by kernel

示例五:監聽指定端口的數據包

 

[root@localhost /]# tcpdump -nn port 22        #<==使用-n選項不進行DNS解析,但是會將一些協議、端口轉換,比如22端口轉為ssh,監聽指定端口的關鍵字是port,后面接上端口號即可。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:06:54.965260 IP 192.168.121.129.22 > 192.168.121.1.51078: Flags [P.], seq 2925446556:2925446740, ack 3597172100, win 585, options [nop,nop,TS val 7173746 ecr 1047249445], length 184
15:06:54.965490 IP 192.168.121.1.51078 > 192.168.121.129.22: Flags [.], ack 184, win 4090, options [nop,nop,TS val 1047249517 ecr 7173746], length 0
15:06:54.966443 IP 192.168.121.129.22 > 192.168.121.1.51078: Flags [P.], seq 184:560, ack 1, win 585, options [nop,nop,TS val 7173747 ecr 1047249517], length 376
15:06:54.966676 IP 192.168.121.1.51078 > 192.168.121.129.22: Flags [.], ack 560, win 4084, options [nop,nop,TS val 1047249518 ecr 7173747], length 0
15:06:54.967317 IP 192.168.121.129.22 > 192.168.121.1.51078: Flags [P.], seq 560:904, ack 1, win 585, options [nop,nop,TS val 7173748 ecr 1047249518], length 344
15:06:54.967500 IP 192.168.121.1.51078 > 192.168.121.129.22: Flags [.], ack 904, win 4085, options [nop,nop,TS val 1047249518 ecr 7173748], length 0
15:06:54.968443 IP 192.168.121.129.22 > 192.168.121.1.51078: Flags [P.], seq 904:1248, ack 1, win 585, options [nop,nop,TS val 7173749 ecr 1047249518], length 344
^C
742 packets captured
742 packets received by filter
0 packets dropped by kernel

 示例六:監聽指定協議的數據包

常見協議關鍵字由ip、arp、icmp、tcp、udp等類型

[root@localhost /]# tcpdump -n arp        #<==監聽ARP數據包,因此表達式直接寫arp即可。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:11:01.898359 ARP, Request who-has 192.168.121.129 tell 192.168.121.2, length 46
15:11:01.898386 ARP, Reply 192.168.121.129 is-at 00:0c:29:63:29:db, length 28
15:11:06.899494 ARP, Request who-has 192.168.121.2 tell 192.168.121.129, length 28
15:11:06.900038 ARP, Reply 192.168.121.2 is-at 00:50:56:fc:3a:9a, length 46
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel


[root@localhost /]# tcpdump -n icmp        #<==監聽icmp數據包(想要查看下面的監控數據,可以使用其他服務器ping本機即可)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:12:30.533308 IP 192.168.121.131 > 192.168.121.129: ICMP echo request, id 13481, seq 1, length 64
15:12:30.533330 IP 192.168.121.129 > 192.168.121.131: ICMP echo reply, id 13481, seq 1, length 64
15:12:31.535165 IP 192.168.121.131 > 192.168.121.129: ICMP echo request, id 13481, seq 2, length 64
15:12:31.535182 IP 192.168.121.129 > 192.168.121.131: ICMP echo reply, id 13481, seq 2, length 64
15:12:32.537233 IP 192.168.121.131 > 192.168.121.129: ICMP echo request, id 13481, seq 3, length 64
15:12:32.537253 IP 192.168.121.129 > 192.168.121.131: ICMP echo reply, id 13481, seq 3, length 64
15:12:33.537889 IP 192.168.121.131 > 192.168.121.129: ICMP echo request, id 13481, seq 4, length 64
15:12:33.537912 IP 192.168.121.129 > 192.168.121.131: ICMP echo reply, id 13481, seq 4, length 64
15:12:34.540105 IP 192.168.121.131 > 192.168.121.129: ICMP echo request, id 13481, seq 5, length 64
15:12:34.540129 IP 192.168.121.129 > 192.168.121.131: ICMP echo reply, id 13481, seq 5, length 64
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel

示例七:多個過濾條件混合使用

前面的幾種方法都是使用單個過濾條件過濾數據包,其實過濾條件可以混合使用,因為tcpdump命令支持邏輯運算and(與)、or(或)、!(非)。

[root@localhost /]# tcpdump -n ip host 192.168.121.129 and ! 192.168.121.1   #<==獲取主機192.168.121.139(tcpdump主機)(除了主機192.168.121.1之外)通信的IP數據包。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:23:15.489964 IP 192.168.121.131 > 192.168.121.129: ICMP echo request, id 19369, seq 1, length 64
15:23:15.489991 IP 192.168.121.129 > 192.168.121.131: ICMP echo reply, id 19369, seq 1, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel

示例八:利用tcpdump抓包詳解TCP/IP連接和端口過程的案例

 一、正常的TCP連接的三個階段。

TCP三次握手

數據傳送

TCP四次斷開

二、TCP三次握手與四次揮手

TCP連接的狀態機制圖見:https://www.cnblogs.com/hwlong/p/9060693.html

三、TCP狀態標識

SYN:(同步序列編號,Synchronize Sequence Numbers)該標志僅在三次握手建立TCP連接時有效。表示一個新的TCP連接請求。
ACK:(確認編號,Acknowledement Number)是對TCP請求的確認標志,同時提示對端系統已經成功接受了所有數據。
FIN:(結束標志,FINish)用來結束一個TCP回話。但對應端仍然處於開放狀態,准備接受后續數據。

四、使用tcpdump對tcp數據進行抓包

更新中



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM