最快捷的抓包方式——tcpdump

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最快捷的抓包方式——tcpdump相关的知识,希望对你有一定的参考价值。

tcpdump知识

在深入tcpdump之前,先贴一张tcp header的格式图,


https://github.com/KristyToKristy/tcpheader/blob/master/tcpheader.png

TCP Flags(tcp header的第十四个字节)

flags位于tcpheader的第十四个字节,包含8个比特位。这8个比特位都有特点的功能用途,分别是:CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。

CWR,ECE:两个flag用来配合congestion control的,一般情况下和应用层的关系不大。发送包ECE为0时表示出现了congestion,接收方回的包里CWR为1表明收到congestion信息并做了处理。

URG 代表Urgent,表明包的优先级高,需要优先传送对方并处理。像我们平时使用terminal的时候经常ctrl+c来结束某个任务,这种命令产生的网络数据包就需要urgent。

ACK 也就是我们所熟悉的ack包,用来告诉对方上一个数据包已经成功收到。不过一般不会为了ack单独发送一个包,都是在下一个要发送的packet里设置ack位,这属于tcp的优化机制

PSH Push我们上面解释过,接收方接收到P位的flag包需要马上将包交给应用层处理,一般我们在http request的最后一个包里都能看到P位被设置

RST Reset位,表明packet的发送方马上就要断开当前连接了。在http请求结束的时候一般可以看到一个数据包设置了RST位

SYN SYN位在发送建立连接请求的时候会设置,我们所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。

SYN SYN位在发送建立连接请求的时候会设置,我们所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。

这8个flag首字母分别是:C E U A P R S F。初看难以记忆,我脑洞了下,把它们组合成 supr cafe,当然少了super少了个e,我可以将就下。我们在使用tcpdump的时候会经常看到这几个flag,[S],[P],[R],[F],[.]。其他几个都好理解,[.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack。

用tcpdump分析http完整请求

知乎APP点赞之后发送的一个http请求tcpdump命令是:

sudo tcpdump -i rvi0  -AAl src 60.28.215.123 or dst 60.28.215.123

技术分享

图中列出了前面的packet。

10.29.44.240是android的ip地址60.28.215.123是知乎server的ip地址红色方框内是android发出的packet,白色方框内是server发出的packet。packet1是android三次握手的第一个syn包,packet2是server ack+syn的包,packet3是android ack的包。这3个packet之后tcp的三次握手就完成了。packet4是android发出的http request。长度只有240个字节,所以一个packet就发过去了,当然还设置了flags的P位,request需要马上被应用层处理。包里面出现了spdy,点赞。packet5是server ack刚收到的包,长度位0,所以这仅仅是一个ack包。

packet6是server返回http的response了,1388个字节。packet5和packet6都ack了seq为241的包,当然是为了增加ack的成功率。

最后两个packet,android发送FIN+ACK的包就断开连接了,server直接发送RST包后也断开连接了。

技术分享

以上是关于最快捷的抓包方式——tcpdump的主要内容,如果未能解决你的问题,请参考以下文章

UNIX系统上的抓包工具tcpdump常用命令说明

UNIX系统上的抓包工具tcpdump常用命令说明

tcpdump常用的抓包命令

tcpdump非常实用的抓包实例

tcpdump非常实用的抓包实例

Tcpdump抓包工具