您的位置:首页 > 理论基础 > 计算机网络

使用tcpdump+Wireshark(或Fiddler)做linux服务器的网络请求分析

2016-01-21 16:04 751 查看
我们的服务器上,一般都没有窗口界面,这时候要抓包,用tcpdump是最方便的。而分析网络请求时,wireshark又是相当方便的,这时候我们就需要把它们两个一起来使用了。

tcpdump 抓取数据

命令格式

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 类型 ] [ -w 文件名 ] [表达式 ]

tcpdump的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)

 

一些常用的命令

监控指定网卡

tcpdump -i eth0 -w dump.pcap


-i
指定要抓取的网卡

-w
指定结果保存位置





当想要停止的时候,按下
ctrl + c
就可以了,然后用 sz 命令或其他方式把 dump.pcap 文件下载到本地:

sz dump.pcap

 

在 wireshark 中查看

打开【file】—【open】选中 dump.pcap 文件就可以查看抓包结果了。





上图是过滤了只显示 http 的包。

Fiddler  查看结果

Wireshark 显示结果不够方便,我们也可以用 Fiddler 看监控的结果。

Fiddler 2 and Fiddler 4 now include import support for PCAP, PCAPNG, and NetMon files. Click File > Import Session > 选择 Packet Capture 类型.

Note that only HTTP traffic will be imported (HTTPS traffic is encrypted, and FTP traffic wasn't a priority).

注意,仅仅 http的包被提取出来了。













 

tcpdump 一些有价值的参数例子

能看到目前记录了多少条信息

-v
主要是为了得到
Got 93
这个数,当想要停止的时候,按下
ctrl + c
就可以了:





结束后可以看到抓取了多少包





 

过滤请求

这时候我们需要用到 tcpdump 的表达式了。 表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。

在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.

第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则

缺省是src or dst关键字。

第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||';

下面是一些例子:

请指定服务器端口发包的过滤请求

tcpdump –i eth0 –w dump.pcap –v host 10.30.0.32 and port 9200





向 10.30.0.32 这个elasticsearch服务器发送请求的抓包。

抓取所有 HTTP 请求

tcpdump -i eth0 -w dump3.pcap -v  'tcp and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

参考 : http://www.tcpdump.org/manpages/tcpdump.1.html 

注意,这时候抓取的数据用 wireshark 看时, 会看到很多 TCP segment of a reassembled PDU 的信息, 如下图:





这是因为:主机响应一个查询或者命令时如果要回应很多数据(信息)而这些数据超出了TCP的最大MSS时,主机会通过发送多个数据包来传送 这些数据(注意:这些包并未被分片)。对wireshark来说这些对相应同一个查询命令的数据包被标记了“TCP segment of a reassembled PDU”

参考: http://blog.csdn.net/hldjf/article/details/7450565

https://sites.google.com/site/jimmyxu101/testing/use-tcpdump-to-monitor-http-traffic 

控制抓取的个数

-c
参数对于运维人员来说也比较常用,因为流量比较大的服务器,靠人工CTRL+C还是抓的太多,甚至导致服务器宕机,于是可以用
-c
参数指定抓多少个包。

time tcpdump -nn -i eth0 'tcp[tcpflags] = tcp-syn' -c 10000 > /dev/null


上面的命令计算抓10000个SYN包花费多少时间,可以判断访问量大概是多少。

 

获取网卡列表

tcpdump -D 获取网络适配器列表





 

参考资料:

tcpdump 抓包让wireshark来分析

http://blog.csdn.net/langeldep/article/details/6156818

tcpdump使用技巧

http://linuxwiki.github.io/NetTools/tcpdump.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: