前段時間和其中一家供應商做GPS對接的時候遇到了一個問題疾牲,他們是用809協(xié)議向我們發(fā)送GPS數(shù)據(jù)植捎,但是我們的DB中一直查不到發(fā)過來的數(shù)據(jù)而且log中根據(jù)他們的IP也沒有找到發(fā)過來的數(shù)據(jù),但是他們一直說發(fā)過來了阳柔,這個時候怎么辦呢焰枢?于是從網(wǎng)上找到了一個linux上截獲網(wǎng)絡數(shù)據(jù)包的命令TCPDUMP。
TCPDUMP可以將網(wǎng)絡中傳送的數(shù)據(jù)包完全截獲下來提供分析。它支持針對網(wǎng)絡層济锄、協(xié)議暑椰、主機、網(wǎng)絡或端口的過濾荐绝,并提供and一汽、or、not等邏輯語句來幫助你去掉無用的信息低滩。
了解了這個TCPDUMP的命令之后我們就可以通過下面這個命令獲取指定IP發(fā)送過來的數(shù)據(jù)包
tcpdump -XX -vvv -nn -i eth1 src host xxx.x.xxx.xxx
- -v:當分析和打印的時候召夹,產生詳細的輸出。
- -vv:產生比-v更詳細的輸出恕沫。
- -vvv:產生比-vv更詳細的輸出监憎。
- -XX:輸出包的頭部數(shù)據(jù),會以16進制和ASCII兩種方式同時輸出婶溯。
- -nn :直接以IP以及PORT number顯示鲸阔,而非主機名與服務名稱
- -i : interface:指定tcpdump需要監(jiān)聽的接口。若未指定該選項迄委,將從系統(tǒng)接口列表中搜尋編號最小的已配置好的接口(不包括loopback接口褐筛,要抓取loopback接口使用tcpdump -i lo),一旦找到第一個符合條件的接口跑筝,搜尋馬上結束死讹。可以使用'any'關鍵字表示所有網(wǎng)絡接口曲梗。
- src : 指定ID的方向 有兩個值可以選擇:src/dst
- host : 指定ID的類型, 有四個值供選擇:host/net/port/portrange
- 最后的 xxx.x.xxx.xxx就是ID赞警,在本例中因為指定的type是host,所以是IP地址虏两。
在輸入上述的命令之后我們會得到下面這個結果:
[root@iZ23yaz766kZ ~]# tcpdump -XX -vvv -nn -i eth1 src host 218.3.146.108
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
15:10:16.719574 IP (tos 0x14, ttl 52, id 24439, offset 0, flags [DF], proto TCP (6), length 131)
218.3.146.108.3956 > 121.41.59.24.14567: Flags [P.], cksum 0x2a72 (correct), seq 2382504609:2382504700, ack 3842476699, win 251, length 91
0x0000: 0016 3e00 422c eeff ffff ffff 0800 4514 ..>.B,........E.
0x0010: 0083 5f77 4000 3406 c638 da03 926c 7929 .._w@.4..8...ly)
0x0020: 3b18 0f74 38e7 8e02 22a1 e507 8a9b 5018 ;..t8...".....P.
0x0030: 00fb 2a72 0000 5b00 0000 5a02 003c 268e ..*r..[...Z..<&.
0x0040: 1200 0004 e24c 0102 0f01 0000 0001 930a .....L..........
0x0050: 8c81 56d6 94dd 6605 6c2c 4699 a51c fa73 ..V...f.l,F....s
0x0060: e5ee 7984 5388 e624 57f4 964a 3803 e0d4 ..y.S..$W..J8...
0x0070: 31b5 c2a3 b242 1cd8 b342 a7cb 921a c100 1....B...B......
0x0080: ec1a 1bf1 7acb 11f6 ede3 59fc 25b8 e5b7 ....z.....Y.%...
0x0090: 5d ]
15:10:17.159556 IP (tos 0x14, ttl 52, id 24491, offset 0, flags [DF], proto TCP (6), length 132)
218.3.146.108.3956 > 121.41.59.24.14567: Flags [P.], cksum 0x0661 (correct), seq 91:183, ack 1, win 251, length 92
0x0000: 0016 3e00 422c eeff ffff ffff 0800 4514 ..>.B,........E.
0x0010: 0084 5fab 4000 3406 c603 da03 926c 7929 .._.@.4......ly)
0x0020: 3b18 0f74 38e7 8e02 22fc e507 8a9b 5018 ;..t8...".....P.
0x0030: 00fb 0661 0000 5b00 0000 5a02 003c 268f ...a..[...Z..<&.
0x0040: 1200 0004 e24c 0102 0f01 0000 0001 930a .....L..........
0x0050: 8c86 57d5 97dd 6605 6c2c 4699 a51c fa73 ..W...f.l,F....s
0x0060: e5ee 7984 5388 e624 57f4 964a 3803 e0d4 ..y.S..$W..J8...
0x0070: 31b7 c2a9 b9d8 1cee 095a 01a7 8392 52c1 1........Z....R.
0x0080: 0351 5c1a bd7a c011 f6ed e259 fc25 b82b .Q\..z.....Y.%.+
0x0090: bf5d .]
15:10:17.179580 IP (tos 0x14, ttl 52, id 24497, offset 0, flags [DF], proto TCP (6), length 131)
218.3.146.108.3956 > 121.41.59.24.14567: Flags [P.], cksum 0xadd0 (correct), seq 183:274, ack 1, win 251, length 91
0x0000: 0016 3e00 422c eeff ffff ffff 0800 4514 ..>.B,........E.
0x0010: 0083 5fb1 4000 3406 c5fe da03 926c 7929 .._.@.4......ly)
0x0020: 3b18 0f74 38e7 8e02 2358 e507 8a9b 5018 ;..t8...#X....P.
0x0030: 00fb add0 0000 5b00 0000 5a02 003c 2690 ......[...Z..<&.
0x0040: 1200 0004 e24c 0102 0f01 0000 0001 930a .....L..........
0x0050: 8cfb 57d1 94d2 6605 6c2c 4699 a51c fa73 ..W...f.l,F....s
0x0060: e5ee 7984 5388 e624 57f4 964a 3803 e0d4 ..y.S..$W..J8...
0x0070: 31b5 c2a9 90b8 1cd3 7f65 a7ce 921f c101 1........e......
0x0080: ecad 1b3b 7acc 11f6 ede2 59fc 25b8 b5b6 ...;z.....Y.%...
0x0090: 5d
這樣我們就得到了從指定IP發(fā)過來的數(shù)據(jù)包愧旦,我們一起中一個作為樣例:
15:10:17.179580 IP (tos 0x14, ttl 52, id 24497, offset 0, flags [DF], proto TCP (6), length 131)
218.3.146.108.3956 > 121.41.59.24.14567: Flags [P.], cksum 0xadd0 (correct), seq 183:274, ack 1, win 251, length 91
0x0000: 0016 3e00 422c eeff ffff ffff 0800 4514 ..>.B,........E.
0x0010: 0083 5fb1 4000 3406 c5fe da03 926c 7929 .._.@.4......ly)
0x0020: 3b18 0f74 38e7 8e02 2358 e507 8a9b 5018 ;..t8...#X....P.
0x0030: 00fb add0 0000 5b00 0000 5a02 003c 2690 ......[...Z..<&.
0x0040: 1200 0004 e24c 0102 0f01 0000 0001 930a .....L..........
0x0050: 8cfb 57d1 94d2 6605 6c2c 4699 a51c fa73 ..W...f.l,F....s
0x0060: e5ee 7984 5388 e624 57f4 964a 3803 e0d4 ..y.S..$W..J8...
0x0070: 31b5 c2a9 90b8 1cd3 7f65 a7ce 921f c101 1........e......
0x0080: ecad 1b3b 7acc 11f6 ede2 59fc 25b8 b5b6 ...;z.....Y.%...
0x0090: 5d
其中前20個字節(jié): 0016 3e00 422c eeff ffff ffff 0800 4514 0083 5fb1 是IP數(shù)據(jù)報的首部。
后面的32個字節(jié): 4000 3406 c5fe da03 926c 7929 3b18 0f74 38e7 8e02 2358 e507 8a9b 5018 00fb add0是TCP數(shù)據(jù)報的首部定罢。
最后面的則是TCP的data部分:0000 5b00 0000 5a02 003c 2690 1200 0004 e24c 0102 0f01 0000 0001 930a 8cfb 57d1 94d2 6605 6c2c 4699 a51c fa73 e5ee 7984 5388 e624 57f4 964a 3803 e0d4 31b5 c2a9 90b8 1cd3 7f65 a7ce 921f c101 ecad 1b3b 7acc 11f6 ede2 59fc 25b8 b5b6 5d笤虫。
這樣我們就獲得了從指定IP發(fā)送過來的數(shù)據(jù),然后就可以進行本地調試來驗證數(shù)據(jù)是否有問題了祖凫。