免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1198 | 回复: 0
打印 上一主题 下一主题

tcpdump的输出分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-13 09:07 |只看该作者 |倒序浏览
以前在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 15001
Trying 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> quit
Connection 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 decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:37:07.448992
IP lsyp1002.xxx.xxxx.com.58939 > 10.111.112.7.15001: S
3188757698:3188757698(0) win 5840
    0x0000:  4510 003c df87 4000 4006 e10b cbd1 fe80  E..
    client(lsyp1002.xxx.xxxx.com.58939)向server(10.111.112.7.15001)发送一个SYN

13:37:07.486678
IP 10.111.112.7.15001 > lsyp1002.xxx.xxxx.com.58939: S
1646598539:1646598539(0) ack 3188757699 win 5792
    0x0000:  4500 003c 0000 4000 3506 cba3 3cbf 7307  E..

  • server向client响应一个(SYN,ACK)

13:37:07.486692
IP lsyp1002.xxx.xxxx.com.58939 > 10.111.112.7.15001: . ack 1 win 46
    0x0000:  4510 0034 df88 4000 4006 e112 cbd1 fe80  E..4..@.@.......
    0x0010:  3cbf 7307 e63b 3a99 be10 94c3 6225 198c  
    client向server响应一个ACK,至此,经典的TCP三次握手完成。

13:37:15.996335
IP lsyp1002.xxx.xxxx.com.58939 > 10.111.112.7.15001: P 1:53(52) ack
1 win 46
    0x0000:  4510 0068 df89 4000 4006 e0dd cbd1 fe80  E..h..@.@.......
    0x0010:  3cbf 7307 e63b 3a99 be10 94c3 6225 198c  
    client向server发送(PSH)数据:$W2,53,100,200,057181932602,13656645563,85022088,#

13:37:16.034003
IP 10.111.112.7.15001 > lsyp1002.xxx.xxxx.com.58939: . ack 53 win 46
    0x0000:  4500 0034 6457 4000 3506 6754 3cbf 7307  E..4dW@.5.gT
    server响应一个ack,表明收到了数据,并期待53序号后面的数据

13:37:16.186581
IP 10.111.112.7.15001 > lsyp1002.xxx.xxxx.com.58939: P 1:15(14) ack
53 win 46
    0x0000:  4500 0042 6458 4000 3506 6745 3cbf 7307  E..BdX@.5.gE
    server的对client作出应答,向client PSH数据:$X2,14,100,1,#

13:37:16.186591
IP lsyp1002.xxx.xxxx.com.58939 > 10.111.112.7.15001: . ack 15 win 46
    0x0000:  4510 0034 df8a 4000 4006 e110 cbd1 fe80  E..4..@.@.......
    0x0010:  3cbf 7307 e63b 3a99 be10 94f7 6225 199a  
    client收到server的数据,进行ack确认

13:37:38.620338
IP lsyp1002.xxx.xxxx.com.58939 > 10.101.10.7.15001: F 53:53(0) ack
15 win 46
    0x0000:  4510 0034 df8b 4000 4006 e10f cbd1 fe80  E..4..@.@.......
    0x0010:  3cbf 7307 e63b 3a99 be10 94f7 6225 199a  
    当向telnet发送quit命令时,telnet进行主动关闭,其向server发送FIN结束信号

13:37:38.658459
IP 10.101.10.7.15001 > lsyp1002.xxx.xxxx.com.58939: F 15:15(0) ack
54 win 46
    0x0000:  4500 0034 6459 4000 3506 6752 3cbf 7307  E..4dY@.5.gR
    server端回应(FIN,ack)信息,即表示收到了client的结束信号,也表示它也将关闭服务端的连接

13:37:38.658474
IP lsyp1002.xxx.xxxx.com.58939 > 10.101.10.7.15001: . ack 16 win 46
    0x0000:  4510 0034 df8c 4000 4006 e10e cbd1 fe80  E..4..@.@.......
    0x0010:  3cbf 7307 e63b 3a99 be10 94f8 6225 199b  
    client对server的FIN信号进行确认。

这就是从发起连接->传送数据->关闭连接的全过程。

以下分析tcpdume输出的数据,取以下这次输出作为样例:
13:37:15.996335
IP lsyp1002.xxx.xxxx.com.58939 > 10.101.10.7.15001: P 1:53(52) ack 1
win 46
    0x0000:  4510 0068 df89 4000 4006 e0dd cbd1 fe80   E..h..@.@.......
    0x0010:  3cbf 7307 e63b 3a99 be10 94c3 6225 198c   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首部长度
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/88379/showart_2147167.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP