Tcpdump与Wireshark抓包分析

做开发的小伙伴,都知道fiddler、httpwatch、Charles(Mac)的抓包工具,但是有的时候或者场景中我们需要整个链路网络问题,例如客户反馈线上业务系统慢,又例如某些网页中使用了activeX使用了TCP协议接口调用,这时候我们为了能够准确地、全链路地抓包和分析就可以用到Tcpdump与Wireshark。

Tcpdump一般Linux和Unix都内置了,Wireshark是开源软件,没有的可以自己百度搜索安装。

Tcpdump用来抓取数据,Wireshark(GUI工具)则是用于分析抓取到的数据比较方便。

1.Tcpdump

语法##

tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]

        [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
        [ -i interface ] [ -m module ] [ -M secret ]
        [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
        [ -W filecount ]
        [ -E spi@ipaddr algo:secret,...  ]
        [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
        [ expression ]
-A:以ASCII编码打印每个报文(不包括链路层的头),这对分析网页来说很方便;
-a:将网络地址和广播地址转变成名字; 
-c<数据包数目>:在收到指定的包的数目后,tcpdump就会停止;
-C:用于判断用 -w 选项将报文写入的文件的大小是否超过这个值,如果超过了就新建文件(文件名后缀是1、2、3依次增加);
-d:将匹配信息包的代码以人们能够理解的汇编格式给出; 
-dd:将匹配信息包的代码以c语言程序段的格式给出; 
-ddd:将匹配信息包的代码以十进制的形式给出;
-D:列出当前主机的所有网卡编号和名称,可以用于选项 -i;
-e:在输出行打印出数据链路层的头部信息; 
-f:将外部的Internet地址以数字的形式打印出来; 
-F<表达文件>:从指定的文件中读取表达式,忽略其它的表达式; 
-i<网络界面>:监听主机的该网卡上的数据流,如果没有指定,就会使用最小网卡编号的网卡(在选项-D可知道,但是不包括环路接口),linux 2.2 内核及之后的版本支持 any 网卡,用于指代任意网卡; 
-l:如果没有使用 -w 选项,就可以将报文打印到 标准输出终端(此时这是默认); 
-n:显示ip,而不是主机名; 
-N:不列出域名; 
-O:不将数据包编码最佳化; 
-p:不让网络界面进入混杂模式; 
-q:快速输出,仅列出少数的传输协议信息; 
-r<数据包文件>:从指定的文件中读取包(这些包一般通过-w选项产生); 
-s<数据包大小>:指定抓包显示一行的宽度,-s0表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,但一般ethernet MTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失; 
-S:用绝对而非相对数值列出TCP关联数; 
-t:在输出的每一行不打印时间戳; 
-tt:在输出的每一行显示未经格式化的时间戳记; 
-T<数据包类型>:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议); 
-v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; 
-vv:输出详细的报文信息; 
-x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册; 
-w<数据包文件>:直接将包写入文件中,并不分析和打印出来;
expression:用于筛选的逻辑表达式;

实操练习##

ifconfig (Mac系统,查看本机网卡信息)


我们来抓取baidu的数据,

ping www.baidu.com,看到控制台返回了IP:14.215.177.39

我们根据tcpdump的命令语法,来抓包并导出文件,执行以下命令:
tcpdump -i en0 -s 0 -n -S host 14.215.177.39 -w ./Desktop/tcpdump_14.215.177.39_01.cap

2.Wireshark工具

使用打开已经安装好的Wireshark,点击打开文件(./Desktop/tcpdump_14.215.177.39_01.cap)

 

之后,我们就可以点击和过滤每个请求可以查看网络的数据包情况(包括握手、挥手) 。

最后,附上一篇总结的比较专业到位的文章链接:https://www.jianshu.com/p/a62ed1bb5b20

 

 

 

posted @ 2020-08-08 17:35  逸_风  阅读(416)  评论(0)    收藏  举报