tcpdump命令:
sudo tcpdump -i ens2f0 port 6471 -XXnnvvv
下面是各個部分的詳細解釋:
1.tcpdump: 這是用于捕獲和分析網絡數據包的命令行工具。
2.-i ens2f0: 指定監聽的網絡接口。ens2f0 表示本地網卡),即計算機該指定網絡接口捕獲的網絡流量。
3.port 6471: 過濾條件,指定只捕獲涉及端口 6471 的數據包。端口 6471 可能是某個應用程序的通信端口。
4.-XX: 表示顯示每個數據包的完整內容,包括數據包的十六進制和 ASCII 形式的輸出。相當于顯示包的詳細數據,以便深入分析其內容。
5.-nn: 防止 tcpdump 將 IP 地址和端口號轉換為域名和服務名稱。直接顯示原始的 IP 地址和端口號。
6.-vvv: 提高輸出的詳細程度,-v 表示 verbose(詳細),-vv 和 -vvv 分別增加詳細輸出的級別。-vvv 會顯示更多的協議詳細信息。
上述tcpdump命令指定了網卡和port過濾報文,但是實測發現無論如何也監聽不到6471端口的報文。
經過排查把命令更換為下述命令,就可以監聽到報文
sudo tcpdump -i lo port 6471 -XXnnv??
分析,同一臺機器上兩個進程之間的通信,監聽指定端口報文的時候,指定外部網絡接口如ens2f0或者不指定網絡接口,都無法監聽到通信報文,有且只有指定網口為本地回環網絡接口時,才能監聽到本地通信報文即:-i lo
ifconfig如下:
lo: flags=73<UP,LOOPBACK,RUNNING> ?mtu 65536
? ? ? ? inet 127.0.0.1 ?netmask 255.0.0.0
? ? ? ? inet6 ::1 ?prefixlen 128 ?scopeid 0x10<host>
? ? ? ? loop ?txqueuelen 1000 ?(Local Loopback)
? ? ? ? RX packets 11391857892 ?bytes 88144245429787 (80.1 TiB)
? ? ? ? RX errors 0 ?dropped 0 ?overruns 0 ?frame 0
? ? ? ? TX packets 11391857892 ?bytes 88144245429787 (80.1 TiB)
? ? ? ? TX errors 0 ?dropped 0 overruns 0 ?carrier 0 ?collisions 0
執行?sudo tcpdump -i lo port 6471 -XXnnv? 后,讓我們詳細解析這個tcpdump -XX
輸出的16進制報文的各部分含義。
報文基本信息
14:37:33.881148 IP (tos 0x0, ttl 64, id 23488, offset 0, flags [DF], proto TCP (6), length 362)
10.229.120.5.28202 > 10.229.120.5.6471: Flags [P.], cksum 0x0731 (incorrect -> 0xdf5d), seq 9714:10024, ack 360, win 1539, options [nop,nop,TS val 3542503468 ecr 3542503468], length 310
-
時間戳:
14:37:33.881148
,表示報文捕獲的時間。 -
IP頭部:
-
tos 0x0
:服務類型字段,值為0,表示常規服務。 -
ttl 64
:生存時間,值為64,表示報文最多可以經過64個路由器。 -
id 23488
:標識字段,用于唯一標識主機發送的每一分組。 -
offset 0
:片偏移字段,值為0,表示該報文不分片。 -
flags [DF]
:不分片標志位,表示該報文不允許分片。 -
proto TCP (6)
:協議字段,值為6,表示上層協議為TCP。 -
length 362
:整個IP報文的長度為362字節。
-
-
TCP頭部:
-
Flags [P.]
:標志位,P
表示推送(PSH),.
表示確認(ACK)。 -
cksum 0x0731 (incorrect -> 0xdf5d)
:校驗和,計算結果為0x0731,但實際應為0xdf5d,表示校驗和錯誤。 -
seq 9714:10024
:序列號范圍,從9714到10024,表示該報文段包含310字節的數據。 -
ack 360
:確認號,表示期望收到的下一個報文段的序列號為360。 -
win 1539
:窗口大小,值為1539,表示接收方的接收窗口大小。 -
options [nop,nop,TS val 3542503468 ecr 3542503468]
:選項字段,包含兩個NOP(無操作)選項和一個時間戳選項,時間戳值為3542503468,時間戳回顯值為3542503468。 -
length 310
:TCP數據部分的長度為310字節。
-
16進制報文詳細解釋
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 016a 5bc0 4000 4006 d7f9 0ae5 7805 0ae5 .j[.@.@.....x...
0x0020: 7805 6e2a 1947 5ebb e7b0 c247 9f08 8018 x.n*.G^....G....
0x0030: 0603 0731 0000 0101 080a d326 502c d326 ...1.......&P,.&
0x0040: 502c 0100 414a 011b 0000 0100 0000 3601 P,..AJ........6.
0x0050: 0000 0000 0ae5 7805 0819 0000 0000 0000 ......x.........
0x0060: 0000 0000 0000 0000 0000 0000 7b22 666d ............{"fm
0x0070: 5479 7065 223a 312c 2272 6573 6f75 7263 Type":1,"resourc
0x0080: 6554 7970 6522 3a22 434c 5553 5445 524d eType":"CLUSTERM
0x0090: 414e 4147 4552 222c 2273 7973 5479 7065 ANAGER","sysType
0x00a0: 223a 3232 3735 302c 2263 6f64 6522 3a32 ":22750,"code":2
0x00b0: 3032 3332 2c22 7265 6173 6f6e 436f 6465 0232,"reasonCode
0x00c0: 223a 3230 3233 3230 322c 2264 6573 6322 ":2023202,"desc"
0x00d0: 3a22 222c 2263 7265 6174 6554 696d 6522 :"","createTime"
0x00e0: 3a22 6e75 6c6c 222c 2263 6c65 6172 5469 :"null","clearTi
0x00f0: 6d65 223a 2232 3032 352d 3031 2d32 3620 me":"2025-01-26.
0x0100: 3134 3a33 373a 3333 222c 2272 6563 6f76 14:37:33","recov
0x0110: 6572 7974 7970 6522 3a34 2c22 6970 223a erytype":4,"ip":
0x0120: 2231 302e 3232 392e 3132 302e 3522 2c22 "10.229.120.5",
0x0130: 706f 7274 223a 3630 3137 2c22 6473 7469 "port":6017,"dsti
0x0140: 6e66 6f22 3a22 312e 312e 312e 313a 3130 nfo":"1.1.1.1:10
0x0150: 3234 3a31 222c 2272 6573 6f75 7263 6549 24:1","resourceI
0x0160: 4422 3a22 3130 2e32 3239 2e31 3230 2e35 D":"10.229.120.5
0x0170: 3a36 3031 3722 7d00 :6017"}
0x0000 - 0x000D:以太網頭部(如果存在)
-
0000 0000 0000 0000 0000 0000
:目的MAC地址(全0,表示可能是一個原始IP報文,沒有以太網封裝)。 -
0800
:以太網類型字段,值為0800,表示這是一個IP報文。
0x000E?- 0x0021:IP頭部
-
4500
:IP版本和首部長度。4表示IP版本為IPv4,5表示IP頭部長度為5個32位字節,即20字節。 -
016a
:總長度,十六進制016a轉換為十進制為362,表示整個IP報文長度為362字節。 -
5bc0
:標識字段,值為5bc0,用于唯一標識主機發送的每一分組。 -
4000
:標志和片偏移字段。4表示不分片(DF位為1),00表示片偏移為0,即該IP報文不分片。 -
4006
:生存時間(TTL)和協議字段。40表示TTL為64,06表示協議為TCP。 -
d7f9
:頭部校驗和,用于檢測IP頭部在傳輸過程中是否出現錯誤。 -
0ae5 7805
:源IP地址,轉換為點分十進制為10.229.120.5。 -
0ae5 7805
:目的IP地址,也是10.229.120.5。
0x0022?- 0x002F:TCP頭部
-
6e2a
:源端口號,十六進制6e2a轉換為十進制為28202。 -
1947
:目的端口號,十六進制1947轉換為十進制為6471。 -
5ebb e7b0
:序列號,值為5ebb e7b0。 -
c247
:確認號,值為c247。 -
9f08
:數據偏移(高4位)和保留位(中間6位)以及緊急指針字段(低4位)。數據偏移值為9(十進制為9),表示TCP頭部長度為9個32位字節,即36字節(包括20字節基本頭部和16字節選項部分)。 -
8018
:標志位和窗口大小字段。80表示PSH(推送)和ACK(確認)標志位為1,18表示窗口大小為18(需要乘以2的10次方,即18 * 1024 = 18432,但這里應該是16位的窗口大小字段,直接轉換為十進制為1539,表示窗口大小為1539)。
0x0030 - 0x0041:TCP頭部(繼續)
-
0603
:檢驗和,用于檢測TCP報文段在傳輸過程中是否出現錯誤。 -
0731
:緊急指針字段,值為0731,但在這個報文段中緊急指針可能沒有實際意義,因為緊急指針字段只有在緊急標志位為1時才有效。 -
0000
:填充字段,用于填充TCP頭部,使其長度為整數個32位字節。 -
0101
:選項字段,表示TCP選項的類型和長度。01表示時間戳選項,01表示該選項長度為10字節。 -
080a
:時間戳選項的類型和子類型,08表示時間戳,0a表示時間戳回顯。 -
d326 502c
:時間戳值,用于TCP的擁塞控制和往返時間測量等。 -
d326 502c
:時間戳回顯值,用于確認對方發送的時間戳。
0x0042?- 0x0170:TCP數據部分
-
0100:TCP數據部分的開始,這部分數據的具體含義需要根據上層應用協議來解釋。例如,如果這是一個HTTP協議的數據,那么這些字節可能是HTTP請求或響應的一部分內容。