Tcpdump使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tcpdump使用相关的知识,希望对你有一定的参考价值。

参考技术A Mac上的rvictl可以通过ios设备的UDID创建一个虚拟网卡,然后通过网瞳监听设备上的所有流量。
rvictl -s udid //创建虚拟网卡命令 sudo tcpdump -i rvi0 -AAl //启动tcpdump监控

经过上面的步骤成功运行tcpdump之后,接下来就可以分析输出的网络包内容了,iOS设备和android设备的输出是一致的。我们先来解析下几个基本的格式:

再继续深入tcpdump之前,先贴上一张tcp header格式图,常看常新。

这部分我们来看下tcpdump常用的一些命令参数。文章最开始部分的tcpdump命令是这样的:sudo tcpdump -i rvi0 -AAl。 -i rvi0 -AAl都是属于参数部分。常见的有这些:
-i, 要监听的网卡名称,-i rvi0监听虚拟网卡。不设置的时候默认监听所有网卡流量。
-A, 用ASCII码展示所截取的流量,一般用于网页或者app里http请求。-AA可以获取更多的信息。
-X,用ASCII码和hex来展示包的内容,和上面的-A比较像。-XX可以展示更多的信息(比如link layer的header)。
-n,不解析hostname,tcpdump会优先暂时主机的名字。-nn则不展示主机名和端口名(比如443端口会被展示成https)。
-s,截取的包字节长度,默认情况下tcpdump会展示96字节的长度,要获取完整的长度可以用-s0或者-s1600。
-c,只截取指定数目的包,然后退出。
-v,展示更多的有用信息,还可以用-vv -vvv增加信息的展示量。
src,指明ip包的发送方地址。
dst,指明ip包的接收方地址。
port,指明tcp包发送方或者接收方的端口号。
and,or,not,操作法,字面意思。

上面几个是我个人比较常用的,更多的参数可以参考这个 详细文档 。有兴趣的可以分析下面几个例子练习下:
tcpdump ‘tcp[13] & 16!=0’
tcpdump src port 80 and tcp
tcpdump -vv src baidu and not dst port 23
tcpdump -nnvvS src 192.0.1.100 and dst port 443

说了这么多,我们再来实战下,看一个完整的http请求流程。 下面截图里的流量是我监听的 知乎App点赞之后发送的一个https请求。我之前先分析过server的ip地址了,tcpdump命令是:
sudo tcpdump -i rvi0 -AAl src 60.28.215.123 or dst 60.28.215.123

图中列出了6个前面的packet,10.29.44.240是我iphone的ip地址,60.28.215.123是知乎server的ip地址,红色方框内是iphone发出的packet,白色方框内是server发出的packet。packet1是iphone三次握手的第一个syn包,packet2是server ack+syn的包,packet3是iphone ack的包。这3个packet之后tcp的三次握手就完成了。
packet4是iphone发出的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就不仔细分析了,最后再看下请求完成的最后几个包:

F5 tcpdump用法

  1. tcpdump -D

    要列出用于数据包捕获的可用接口,请使用tcpdump -D

  1. tcpdump -i

    要捕获特定接口上的流量,请使用tcpdump -i <接口名称>。即‘tcpdump -i 0.0‘

    当对捕获的接口使用0.0时,请确保使用捕获过滤器,否则您会获得太多信息,并可能影响F5的性能。

  1. tcpdump -n

    使用tcpdump -n禁用主机名的名称解析

  1. tcpdump -nn

    使用tcpdump -nn禁用主机名和端口名的名称解析

  1. tcpdump -X

    使用tcpdump -X显示包括ASCII和十六进制的输出。这将使阅读屏幕输出更加容易。

  1. tcpdump -w

    使用tcpdump -w将数据包捕获写入到在Wireshark等应用程序中可读的捕获文件。

  1. tcpdump -r

    使用tcpdump -r <文件名>读取文件。

  1. tcpdump -s

    使用“ tcpdump -s0”捕获完整的数据包。s后面的数字表示每个数据包要捕获的位数。0表示全部。

        9. tcpdump host

    tcpdump host 192.168.2.5 这将过滤数据包捕获,以仅收集去往或来自主机192.168.2.5的数据包。

    tcpdump src host 192.168.2.5 这将过滤数据包捕获,以仅收集来自192.168.2.5的数据包。

    tcpdump dst host 192.168.2.5 这将过滤数据包捕获,以仅收集去往192.168.2.5的数据包。

       10. tcpdump port

    tcpdump port 443 这将过滤数据包捕获,以仅收集源或目标端口为443的数据包。

    tcpdump src port 1055 这将捕获来自端口1055的流量。

    tcpdump dst port 443 这将捕获发往端口443的流量。

 

·END·

攻城狮之路,路虽远,行则将至!

以上是关于Tcpdump使用的主要内容,如果未能解决你的问题,请参考以下文章

tcpdump使用

tcpdump抓包命令使用说明

如何读懂tcpdump的输出

tcpdump抓包工具的基本使用

tcpdump截帧工具使用

tcpdump使用