WireShark学习笔记

作者: 土豆特别想爬山 | 来源:发表于2017-02-15 14:55 被阅读1822次

    抓包工具 Wireshark, 用来获取网络数据封包,包括 HTTP、TCP、UDP 等网络协议包。

    wireshark是开源软件,可以放心使用。 可以运行在WindowsMac OS上。

    wireshark只能查看封包,而不能修改封包的内容,或者发送封包。

    Wireshark VS Fiddler

    Fiddler是在windows上运行的程序,专门用来捕获HTTP,HTTPS的。

    wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容。

    总结,如果是处理HTTP,HTTPS 还是用Fiddler,  其他协议比如TCP,UDP 就用wireshark。

    同类的其他工具微软的network monitor,sniffer

    开始抓包

    wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。

    点击Caputre->Interfaces.. 出现下面对话框,选择正确的网卡。然后点击”Start”按钮, 开始抓包。

    Caputre->Interfaces

    WireShark 主要分为这几个界面

    1. Display Filter(显示过滤器),  用于过滤

    2. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表

    3. Packet Details Pane(封包详细信息), 显示封包中的字段

    4. Dissector Pane(16进制数据)

    5. Miscellanous(地址栏,杂项)

    界面

    过滤器有两种:

    一种是显示过滤器,就是主界面上那个,用来在捕获的记录中找到所需要的记录

    一种是捕获过滤器,用来过滤捕获的封包,以免捕获太多的记录。 在Capture -> Capture Filters 中设置

    过滤表达式的规则

    表达式规则

    1. 协议过滤

    比如TCP,只显示TCP协议。

    2. IP 过滤

    比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102,

    ip.dst==192.168.1.102, 目标地址为192.168.1.102

    3. 端口过滤

    tcp.port ==80,  端口为80的

    tcp.srcport == 80,  只显示TCP协议的愿端口为80的。

    4. Http模式过滤

    http.request.method==”GET”,   只显示HTTP GET方法的。

    5. 逻辑运算符为 AND/ OR

    封包列表(Packet List Pane)

    封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你可以看到不同的协议用了不同的颜色显示。

    你也可以修改这些显示颜色的规则,  View ->Coloring Rules.

    封包详细信息 (Packet Details Pane)

    这个面板是我们最重要的,用来查看协议中的每一个字段。

    各行信息分别为

    Frame:物理层的数据帧概况

    EthernetII:数据链路层以太网帧头部信息

    Internet Protocol Version 4:互联网层IP包头部信息

    Transmission Control Protocol:传输层T的数据段头部信息,此处是TCP

    Hypertext Transfer Protocol:应用层的信息,此处是HTTP协议

    对应七层模型 TCP包中的每个字段 TCP三次握手

    TCP:

    TCP/IP通过三次握手建立一个连接。这一过程中的三种报文是:SYN,SYN/ACK,ACK。

    第一步是找到PC发送到网络服务器的第一个SYN报文,这标识了TCP三次握手的开始。

    如果你找不到第一个SYN报文,选择Edit -> Find Packet菜单选项。选择Display Filter,输入过滤条件:tcp.flags,这时会看到一个flag列表用于选择。选择合适的flag,tcp.flags.syn并且加上==1。点击Find,之后trace中的第一个SYN报文就会高亮出来了。

    注意:Find Packet也可以用于搜索十六进制字符,比如恶意软件信号,或搜索字符串,比如抓包文件中的协议命令。

    一个快速过滤TCP报文流的方式是在Packet List Panel中右键报文,并且选择Follow TCP Stream。这就创建了一个只显示TCP会话报文的自动过滤条件。

    这一步骤会弹出一个会话显示窗口,默认情况下包含TCP会话的ASCII代码,客户端报文用红色表示,服务器报文则为蓝色。


    HTTP

    当HTTP发送初始GET命令之后,TCP继续数据传输过程,接下来的链接过程中HTTP会从服务器请求数据并使用TCP将数据传回客户端。传送数据之前,服务器通过发送HTTP  OK消息告知客户端请求有效。如果服务器没有将目标发送给客户端的许可,将会返回403 Forbidden。如果服务器找不到客户端所请求的目标,会返回404。

    如果没有更多数据,连接可被终止,类似于TCP三次握手信号的SYN和ACK报文,这里发送的是FIN和ACK报文。当服务器结束传送数据,就发送FIN/ACK给客户端,此报文表示结束连接。接下来客户端返回ACK报文并且对FIN/ACK中的序列号加1。这就从服务器端终止了通信。要结束这一过程客户端必须重新对服务器端发起这一过程。必须在客户端和服务器端都发起并确认FIN/ACK过程。

    基本IO Graphs:

    IO graphs是一个非常好用的工具。基本的Wireshark IO

    graph会显示抓包文件中的整体流量情况,通常是以每秒为单位(报文数或字节数)。默认X轴时间间隔是1秒,Y轴是每一时间间隔的报文数。如果想要查看每秒bit数或byte数,点击“Unit”,在“Y

    Axis”下拉列表中选择想要查看的内容。这是一种基本的应用,对于查看流量中的波峰/波谷很有帮助。要进一步查看,点击图形中的任意点就会看到报文的细节。

    过滤:

    每一个图形都可以应用一个过滤条件。这里创建两个不同的graph,一个HTTP一个ICMP。可以看到过滤条件中Graph 1使用“http”Graph 2使用“icmp”。图中可以看到红色ICMP流量中有些间隙,进一步分析。

    过滤

    常用排错过滤条件:

    对于排查网络延时/应用问题有一些过滤条件是非常有用的:

    tcp.analysis.lost_segment:表明已经在抓包中看到不连续的序列号。报文丢失会造成重复的ACK,这会导致重传。

    tcp.analysis.duplicate_ack:显示被确认过不止一次的报文。大凉的重复ACK是TCP端点之间高延时的迹象。

    tcp.analysis.retransmission:显示抓包中的所有重传。如果重传次数不多的话还是正常的,过多重传可能有问题。这通常意味着应用性能缓慢和/或用户报文丢失。

    tcp.analysis.window_update:将传输过程中的TCP window大小图形化。如果看到窗口大小下降为零,这意味着发送方已经退出了,并等待接收方确认所有已传送数据。这可能表明接收端已经不堪重负了。

    tcp.analysis.bytes_in_flight:某一时间点网络上未确认字节数。未确认字节数不能超过你的TCP窗口大小(定义于最初3此TCP握手),为了最大化吞吐量你想要获得尽可能接近TCP窗口大小。如果看到连续低于TCP窗口大小,可能意味着报文丢失或路径上其他影响吞吐量的问题。

    tcp.analysis.ack_rtt:衡量抓取的TCP报文与相应的ACK。如果这一时间间隔比较长那可能表示某种类型的网络延时(报文丢失,拥塞,等等)。

    函数:

    IO Graphs有六个可用函数:SUM, MIN, AVG, MAX, COUNT, LOAD。

    MIN( ), AVG( ), MAX( )

    首先看一下帧之间的最小,平均和最大时间,这对于查看帧/报文之间的延时非常有用。我们可以将这些函数结合“frame.time_delta过滤条件看清楚帧延时,并使得往返延时更为明显。如果抓包文件中包含不同主机之间的多个会话,而只想知道其中一个pair,可将“frame.time_delta”结合源和目标主机条件如“ip.addr==x.x.x.x &&ip.addr==y.y.y.y”。如下图所示:

    函数

    我们做了以下步骤:

    将Y轴设置为“Advanced”,让Caculation域可见。不做这一步就看不到计算选项。

    X轴时间间隔1秒,所以每个柱状图代表1秒间隔的计算结果。

    过滤出两个特定IP地址的HTTP会话,使用条件:“(ip.addr==192.168.1.4&& ip.addr==128.173.87.169) && http”。

    使用3个不同的graph,分别计算Min(), Avg(), Max()。

    对每一个计算结果应用条件“frame.time_delta”,将style设置成“FBar”,显示效果最佳。

    Count( ):此函数计算时间间隔内事件发生的次数,在查看TCP分析标识符时很有用,例如重传。

    Sum( ):该函数统计事件的累加值。有两种常见的用例是看在捕获TCP数据量,以及检查TCP序列号。

    协议过滤器:

    arp:显示所有包括ARP请求和回复在内的所有ARP数据流。

    ip:显示内含IPv4头在内的(如ICMP目的地址不可达报文,在ICMP报文头之后返回到来方向的IPv4头)IP数据流。

    ipv6:显示所有IPv6数据流,包括内含IPv6报文头的IPv4报文,如6to4,Teredo,以及ISATAP数据流。

    tcp:显示所有基于TCP的数据流。

    应用过滤器:

    bootp:显示所有DHCP数据流(基于BOOTP)。

    dns:显示包括TCP区域传输以及基于标准UDP的DNS请求和回复在内的所有DNS数据流。

    tftp:显示所有TFTP(Trivial File Transfer Protocol)数据流。

    http:显示所有HTTP命令,回复以及数据传输报文,但不显示TCP握手报文,TCP ACK报文以及TCP结束报文。

    icmp:显示所有ICMP报文。

    域过滤器:

    boot.option.hostname:显示所有包含主机名的DHCP数据流(DHCP基于BOOTP)。

    http:host:显示所有包含HTTP主机名字段的所有HTTP报文。此报文是客户端向网络服务器发送请求时发出的。

    ftp.request.command:显示所有包含命令的FTP数据流,比如USER,PASS,或RETR命令。

    字符过滤器:

    tcp.analysis.flags:显示所有包含TCP分析标识的所有报文,包括报文丢失,重传,或零窗口标识。

    tcp.analysis,zero_window:显示含有表明发送方的接收缓存用完标识的报文。

    显示过滤器比较运算符:

    通过扩展过滤条件可查找某一域值,Wireshark针对此功能支持数字比较运算符。

    1. ==或eq

    例如:ip.src == 10.2.2.2

    显示所有源地址为10.2.2.2的IPv4数据流

    2. !=或ne

    例如:tcp.srcport != 80

    显示源端口除了80以外的所有TCP数据流

    3. >或gt

    例如:frame.time_relative > 1

    显示距前一个报文到达时间相差1秒的报文

    4. <或lt

    例如:tcp.window_size < 1460

    显示当TCP接收窗口小于1460字节时的报文

    5. >=或ge

    例如:dns.count.answers >= 10

    显示包含10个以上answer的DNS响应报文

    6. <=或le

    例如:ip.ttl <= 10

    显示IP报文中Time to Live字段小于等于10的报文

    7. contains

    例如:http contains “GET”

    显示所有HTTP客户端发送给HTTP服务器的GET请求

    对于基于TCP应用的过滤条件采用比较运算符。例如,如果想看端口80上面的HTTP数据流,使用HTTP.port==80。

    小贴士:

    运算符两边不用留空格。ip.src == 10.2.2.2与ip.src==10.2.2.2的效果是相同的。

    过滤HTTP数据流:

    在排查网页浏览器会话或检查网速过慢问题时,对浏览器会话进行过滤就显得尤为重要。过滤HTTP数据流有两种方式:

    http

    tcp.port==xx(xx表示所使用的HTTP端口)

    第二种过滤方法更加有效。

    相关文章

      网友评论

      • 6227addee3a9:大赞楼主,好文章:)
      • 摸鱼哥:抓一个https的数据流,连上手机连上pc的代理之后app就连接不上服务器了,这个要怎么处理
        土豆特别想爬山: @爱笑的小pp 这样子,我没怎么抓过app包呢,你好好研究研究,写篇文章分享一下吧( ˃᷄˶˶̫˶˂᷅ )羞
        摸鱼哥:@土豆特别想爬山 配置了呢,国内的app的https可以抓呢,有个国外的叫visbit的app不能抓取,是不是用了什么方式反抓包,有没有什么破解之道,另外,能不能给个链接讲解一下反抓包是如何实现的
        土豆特别想爬山:@爱笑的小pp sorry,才看到,问题解决了吗?是用的fiddler抓包吗?fiddler抓HTTPS的话,是否配置了fiddler option的HTTPS?
      • pleasures:很不错 加油
        土豆特别想爬山: @pleasures 嗯,多谢鼓励
      • c7b347048025:技术文章明显评论少呀,哈哈,顶一个
        土豆特别想爬山: @JOHNNY孙 多谢

      本文标题:WireShark学习笔记

      本文链接:https://www.haomeiwen.com/subject/kmnkbttx.html