zoukankan      html  css  js  c++  java
  • 使用tcpdump+Wireshark(或Fiddler)做linux服务器的网络请求分析

    我们的服务器上,一般都没有窗口界面,这时候要抓包,用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 指定结果保存位置

    image

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

    sz dump.pcap

     

    在 wireshark 中查看

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

    image

    上图是过滤了只显示 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的包被提取出来了。

    image

    image

    image

     

    tcpdump 一些有价值的参数例子

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

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

    image

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

    image

     

    过滤请求

    这时候我们需要用到 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

    image

    向 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 的信息, 如下图:

    image

    这是因为:主机响应一个查询或者命令时如果要回应很多数据(信息)而这些数据超出了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 获取网络适配器列表

    image

     

    参考资料:

    tcpdump 抓包让wireshark来分析
    http://blog.csdn.net/langeldep/article/details/6156818

    tcpdump使用技巧
    http://linuxwiki.github.io/NetTools/tcpdump.html

  • 相关阅读:
    最近纠结致死的一个java报错java.net.SocketException: Connection reset 终于得到解决
    分享:fastjson 1.1.28 发布,Java 的 JSON 库
    Google Code Jam
    firefox 17.0 编包记(fedora 17)
    中文分词文献列表 Bibliography of Chinese Word Segmentation
    ThriftUsageC++ Thrift Wiki
    try thrift
    SENNA
    Ghostscript: Ghostscript Downloads
    DHCP简介
  • 原文地址:https://www.cnblogs.com/ghj1976/p/5148603.html
Copyright © 2011-2022 走看看