本文共 5920 字,大约阅读时间需要 19 分钟。
以前在TCP卷一里,看到过tcpdump的使用。当时,没太在意,尤其它输出的格式,因为不熟悉,更不愿去用它。这段时间的开发,用socket比较多。在遇到问题时,仅从socket api函数的返回值,往往看不出问题的实质。
后来,经laser提醒,才知道tcpdump的强大。这里不想介绍tcpdump的选项,我只想举一些实例,以便给自己作个笔记。
使用以下命令,监听15001端口的tcp连接,-X 表示以16进制显示报文,-s 0 表示显示整个ip报的内容(默认为68bytes),但如果太长的话,tcpdump的缓冲区可能不够用而引发丢失报文:
$ tcpdump 'port 15001 and tcp' -X -s 0
例如,使用telnet发起连接:
yunkai@lsyp1002:~/tmp $ telnet 10.111.112.7 15001Trying 10.111.112.7...Connected to 10.111.112.7 (10.111.112.7).Escape character is '^]'.$W2,53,100,200,057181932602,13656645563,85022088,#$X2,14,100,1,#^]telnet> quitConnection closed.
tcpdump的输出如下:
root@lsyp1002:~ # /usr/sbin/tcpdump 'port 15001 and tcp' -X -s 0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes13:37:07.448992 IP lsyp1002.xxx.xxxx.com.58939 > 10.111.112.7.15001: S 3188757698:3188757698(0) win 5840 <mss 1460,sackOK,timestamp 870140741 0,nop,wscale 7> 0x0000: 4510 003c df87 4000 4006 e10b cbd1 fe80 E..<..@.@....... 0x0010: 3cbf 7307 e63b 3a99 be10 94c2 0000 0000 <.s..;:......... 0x0020: a002 16d0 c44c 0000 0204 05b4 0402 080a .....L.......... 0x0030: 33dd 4b45 0000 0000 0103 0307 3.KE........13:37:07.486678 IP 10.111.112.7.15001 > lsyp1002.xxx.xxxx.com.58939: S 1646598539:1646598539(0) ack 3188757699 win 5792 <mss 1460,sackOK,timestamp 3676470709 870140741,nop,wscale 7>
0x0000: 4500 003c 0000 4000 3506 cba3 3cbf 7307 E..<..@.5...<.s. 0x0010: cbd1 fe80 3a99 e63b 6225 198b be10 94c3 ....:..;b%...... 0x0020: a012 16a0 efe2 0000 0204 05b4 0402 080a ................ 0x0030: db22 7db5 33dd 4b45 0103 0307 ."}.3.KE....13:37:07.486692 IP lsyp1002.xxx.xxxx.com.58939 > 10.111.112.7.15001: . ack 1 win 46 <nop,nop,timestamp 870140779 3676470709>
0x0000: 4510 0034 df88 4000 4006 e112 cbd1 fe80 E..4..@.@....... 0x0010: 3cbf 7307 e63b 3a99 be10 94c3 6225 198c <.s..;:.....b%.. 0x0020: 8010 002e 34fb 0000 0101 080a 33dd 4b6b ....4.......3.Kk 0x0030: db22 7db5 ."}.13:37:15.996335 IP lsyp1002.xxx.xxxx.com.58939 > 10.111.112.7.15001: P 1:53(52) ack 1 win 46 <nop,nop,timestamp 870149289 3676470709>
0x0000: 4510 0068 df89 4000 4006 e0dd cbd1 fe80 E..h..@.@....... 0x0010: 3cbf 7307 e63b 3a99 be10 94c3 6225 198c <.s..;:.....b%.. 0x0020: 8018 002e 296c 0000 0101 080a 33dd 6ca9 ....)l......3.l. 0x0030: db22 7db5 2457 322c 3533 2c31 3030 2c32 ."}.$W2,53,100,2 0x0040: 3030 2c30 3537 3138 3139 3332 3630 322c 00,057181932602, 0x0050: 3133 3635 3636 3435 3536 332c 3835 3032 13656645563,8502 0x0060: 3230 3838 2c23 0d0a 2088,#..13:37:16.034003 IP 10.111.112.7.15001 > lsyp1002.xxx.xxxx.com.58939: . ack 53 win 46 <nop,nop,timestamp 3676479257 870149289>
0x0000: 4500 0034 6457 4000 3506 6754 3cbf 7307 E..4dW@.5.gT<.s. 0x0010: cbd1 fe80 3a99 e63b 6225 198c be10 94f7 ....:..;b%...... 0x0020: 8010 002e f224 0000 0101 080a db22 9f19 .....$.......".. 0x0030: 33dd 6ca9 3.l.13:37:16.186581 IP 10.111.112.7.15001 > lsyp1002.xxx.xxxx.com.58939: P 1:15(14) ack 53 win 46 <nop,nop,timestamp 3676479410 870149289>
0x0000: 4500 0042 6458 4000 3506 6745 3cbf 7307 E..BdX@.5.gE<.s. 0x0010: cbd1 fe80 3a99 e63b 6225 198c be10 94f7 ....:..;b%...... 0x0020: 8018 002e b507 0000 0101 080a db22 9fb2 .............".. 0x0030: 33dd 6ca9 2458 322c 3134 2c31 3030 2c31 3.l.$X2,14,100,1 0x0040: 2c23 ,#13:37:16.186591 IP lsyp1002.xxx.xxxx.com.58939 > 10.111.112.7.15001: . ack 15 win 46 <nop,nop,timestamp 870149479 3676479410>
0x0000: 4510 0034 df8a 4000 4006 e110 cbd1 fe80 E..4..@.@....... 0x0010: 3cbf 7307 e63b 3a99 be10 94f7 6225 199a <.s..;:.....b%.. 0x0020: 8010 002e f0bf 0000 0101 080a 33dd 6d67 ............3.mg 0x0030: db22 9fb2 ."..13:37:38.620338 IP lsyp1002.xxx.xxxx.com.58939 > 10.101.10.7.15001: F 53:53(0) ack 15 win 46 <nop,nop,timestamp 870171913 3676479410>
0x0000: 4510 0034 df8b 4000 4006 e10f cbd1 fe80 E..4..@.@....... 0x0010: 3cbf 7307 e63b 3a99 be10 94f7 6225 199a <.s..;:.....b%.. 0x0020: 8011 002e 991c 0000 0101 080a 33dd c509 ............3... 0x0030: db22 9fb2 ."..13:37:38.658459 IP 10.101.10.7.15001 > lsyp1002.xxx.xxxx.com.58939: F 15:15(0) ack 54 win 46 <nop,nop,timestamp 3676501883 870171913>
0x0000: 4500 0034 6459 4000 3506 6752 3cbf 7307 E..4dY@.5.gR<.s. 0x0010: cbd1 fe80 3a99 e63b 6225 199a be10 94f8 ....:..;b%...... 0x0020: 8011 002e 4152 0000 0101 080a db22 f77b ....AR.......".{ 0x0030: 33dd c509 3...13:37:38.658474 IP lsyp1002.xxx.xxxx.com.58939 > 10.101.10.7.15001: . ack 16 win 46 <nop,nop,timestamp 870171951 3676501883>
0x0000: 4510 0034 df8c 4000 4006 e10e cbd1 fe80 E..4..@.@....... 0x0010: 3cbf 7307 e63b 3a99 be10 94f8 6225 199b <.s..;:.....b%.. 0x0020: 8010 002e 412c 0000 0101 080a 33dd c52f ....A,......3../ 0x0030: db22 f77b .".{这就是从发起连接->传送数据->关闭连接的全过程。
以下分析tcpdume输出的数据,取以下这次输出作为样例:
13:37:15.996335 IP lsyp1002.xxx.xxxx.com.58939 > 10.101.10.7.15001: P 1:53(52) ack 1 win 46 <nop,nop,timestamp 870149289 3676470709>
0x0000: 4510 0068 df89 4000 4006 e0dd cbd1 fe80 E..h..@.@....... 0x0010: 3cbf 7307 e63b 3a99 be10 94c3 6225 198c <.s..;:.....b%.. 0x0020: 8018 002e 296c 0000 0101 080a 33dd 6ca9 ....)l......3.l. 0x0030: db22 7db5 2457 322c 3533 2c31 3030 2c32 ."}.$W2,53,100,2 0x0040: 3030 2c30 3537 3138 3139 3332 3630 322c 00,057181932602, 0x0050: 3133 3635 3636 3435 3536 332c 3835 3032 13656645563,8502 0x0060: 3230 3838 2c23 0d0a 2088,#..红色部分,为IP数据报的首部,共20字节。
蓝色部分,为TCP数据报的首部,共8*32bit=32个字节。 灰色部分,为TCP的DATA部分。 TCP的首部,没有DATA的长度信息,因为IP的首部已经包含了整个IP包的共长度,可以由下面的减法求出DATA的长度:length(TCP.DATA) = IP包的总长度 - IP首部长度 - TCP首部长度
转载地址:http://cgvxi.baihongyu.com/