【调试工具】tcpdump

原文地址:tcpdump抓包工具使用
在调试网络通信程序是tcpdump是必备工具。tcpdump很强大,可以看到网络通信的每个细节。如TCP,可以看到3次握手,PUSH/ACK数据推送,close4次挥手,全部细节。包括每一次网络收包的字节数,时间等

最简单的一个使用示例:
sudo tcpdump -i any tcp port 11211

  • -i 参数制定了网卡,any表示所有网卡

  • tcp 指定仅监听TCP协议

  • port 制定监听的端口

tcpdump需要root权限 需要要看通信的数据内容,可以加 -Xnlps0 参数,其他更多参数请参见网上的文章

演示一个memcache的连接,赋值,取值,关闭连接过程

执行命令:

telnet 10.8.34.27 11211

运行结果:

15:14:34.336031 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [S], seq 3049437196, win 14480, options [mss 1460,sackOK,TS val 910488745 ecr 4129152319,nop,wscale 7], length 0
15:14:34.336057 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [S.], seq 3663074357, ack 3049437197, win 14480, options [mss 1460,sackOK,TS val 4129152433 ecr 910488745,nop,wscale 7], length 0
15:14:34.336159 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [.], ack 1, win 114, options [nop,nop,TS val 910488745 ecr 4129152433], length 0

执行命令:

get userId

运行结果:

15:23:40.025373 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 15:27, ack 6, win 114, options [nop,nop,TS val 911034453 ecr 4129686634], length 12
15:23:40.025571 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [P.], seq 6:35, ack 27, win 114, options [nop,nop,TS val 4129698122 ecr 911034453], length 29
15:23:40.025768 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [.], ack 35, win 114, options [nop,nop,TS val 911034453 ecr 4129698122], length 0

执行命令:

set username 0 0 4

运行结果:

15:27:45.985897 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 153:173, ack 160, win 114, options [nop,nop,TS val 911280417 ecr 4129926755], length 20
15:27:46.025059 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [.], ack 173, win 114, options [nop,nop,TS val 4129944122 ecr 911280417], length 0

运行命令:

nick

运行结果:

15:28:47.625886 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 173:179, ack 160, win 114, options [nop,nop,TS val 911342058 ecr 4129944122], length 6
15:28:47.625910 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [.], ack 179, win 114, options [nop,nop,TS val 4130005722 ecr 911342058], length 0
15:28:47.626046 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [P.], seq 160:168, ack 179, win 114, options [nop,nop,TS val 4130005723 ecr 911342058], length 8
15:28:47.626204 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [.], ack 168, win 114, options [nop,nop,TS val 911342058 ecr 4130005723], length 0

执行命令:

get username

运行结果:

15:29:59.978653 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 179:193, ack 168, win 114, options [nop,nop,TS val 911414421 ecr 4130005723], length 14
15:29:59.978743 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [P.], seq 168:199, ack 193, win 114, options [nop,nop,TS val 4130078075 ecr 911414421], length 31
15:29:59.978867 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [.], ack 199, win 114, options [nop,nop,TS val 911414421 ecr 4130078075], length 0

执行命令:

quit

运行结果:

15:30:52.755257 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [P.], seq 193:199, ack 199, win 114, options [nop,nop,TS val 911467215 ecr 4130078075], length 6
15:30:52.755534 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [F.], seq 199, ack 199, win 114, options [nop,nop,TS val 4130130852 ecr 911467215], length 0
15:30:52.755843 IP 10.8.34.13.46103 > 10.8.34.27.memcache: Flags [F.], seq 199, ack 200, win 114, options [nop,nop,TS val 911467215 ecr 4130130852], length 0
15:30:52.755865 IP 10.8.34.27.memcache > 10.8.34.13.46103: Flags [.], ack 200, win 114, options [nop,nop,TS val 4130130852 ecr 911467215], length 0
  • 15:30:52.755865 时间带有精确到微妙

  • 10.8.34.13.36686 > 10.8.34.27.memcache 表示通信的流向,36686是客户端,memcache是服务器端

  • [S] 表示这是一个SYN请求

  • [.] 表示这是一个ACK确认包,(client)SYN->(server)SYN->(client)ACK 就是3次握手过程

  • [P] 表示这个是一个数据推送,可以是从服务器端向客户端推送,也可以从客户端向服务器端推

  • [F] 表示这是一个FIN包,是关闭连接操作,client/server都有可能发起

  • [R] 表示这是一个RST包,与F包作用相同,但RST表示连接关闭时,仍然有数据未被处理。可以理解为是强制切断连接

  • win 114是指滑动窗口大小(接收缓存的窗口大小)

  • length 12指数据包的大小

三次握手部分:

16:01:29.583827 IP 10.8.34.13.45468 > 10.8.34.27.memcache: Flags [S], seq 2309185558, win 14480, options [mss 1460,sackOK,TS val 913304024 ecr 4131967648,nop,wscale 7], length 0
  • Flags是[S],表明是syn建立连接包(即三次握手的第一次握手)

  • seq
    2309185558序号为2309185558,这个其实就是tcp三次握手的第一次握手10.8.34.13.45468发送syn请求建立连接包

  • win 14480,表示窗口大小为14480字节

  • options [mss 1460,sackOK,TS val 913304024 ecr 4131967648,nop,wscale
    7]为tcp首部可选字段,

  • mss
    1460表示mss是发送端(client)通告的最大报文长度,发送端将不接收超过这个长度的tcp报文段(这个值和MTU有关)。sackOK表示发送端支持并同意使用SACK选项。wscale

7表示发送端使用的窗口扩大因子为7

    原文作者:hizengzeng
    原文地址: https://segmentfault.com/a/1190000009691705
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞