Wireshark工具使用

红米1年前技术文章332

一、介绍

wireshark是一款免费、开源的网络抓包工具。

项目地址如下:

https://github.com/wireshark/wireshark

应用如下:

1. 网络管理员会使用wireshark来检查网络问题

2. 软件测试工程师使用wireshark抓包,来分析自己测试的软件

3. 从事socket编程的工程师会用wireshark来调试

📌为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。

二、Mac系统下使用

1、下载软件:

https://www.wireshark.org/download.html

2、解压并进行安装

3、设置参数如下:

image_OC4Wz4D6l5.png

4、开启抓包,同时浏览器访问http://172.16.121.211:30000/

image_jo7CqmhrhP.png

结果解释:从图上可以看出,本机ip为192.168.113.119,服务端ip为:172.16.121.211,端口为30000.首先,本机发送一个tcp请求,服务端对其tcp请求进行响应。建立链接之后,本机向服务端发送数据包和http请求,服务端回数据包并发送http请求结果.本机确认收到了服务端端数据和http请求结果。

image.png

image.png

5、过滤表达式及规则:

a. 协议过滤比如TCP,只显示TCP协议
b. IP 过滤: ip.src ==192.168.1.102  显示源地址为192.168.1.102
    ip.dst==192.168.1.102       目标地址为192.168.1.102
    ip.addr == 172.16.121.211   地址为172.16.121.211
c.端口过滤tcp.port ==80。 端口为80
 tcp.srcport == 80    只显示TCP协议的源端口为80
d. Http模式过滤http.request.method==”GET”     只显示HTTP GET方法

6、颜色解释:

  • 聊天(蓝色)

    有关常用的工作流程信息,例如设置了 SYN 标志的 TCP 数据包;数据包都符合常规流量的特征,包括 SYN、FIN、RST以及各种状态码的HTTP事件。

  • 注意(青色)

    值得注意的事件,例如应用程序返回了一个常见的错误代码,例如 HTTP 404;数据包中有可能会引发故障的异常现象,例如TCP重传、重复确认、快速重传等现象。

  • 警告(黄色)

    警告,例如应用程序返回异常错误代码,如连接问题。

    与 TCP窗口有关的事件 TCP window full或TCP zero window,一般是连接设备忙不过来所致。

    与 TCP报文段丢失或失序有关的事件,丢失是因为未抓全某个 TCP数据流的所有 TCP报文段;失序是因其感知到了TCP报文段未按发出的顺序到达接收主机。

  • 错误(红色)

    严重的问题。

    校验和错误:Ethernet及IP校验和错误。

    伪造的数据包:一般涉及具体的应用层协议

三、linux系统下使用

1、下载命令

yum install -y tcpdump

2、基本使用

tcpdump -i [网卡名] -nn host [主机ip] -w [文件名]

   -i :指定网络接口,对于多个网络接口有用
   -n :显示IP地址,不查主机名。当DNS不起作用时常用到这个参数
   -nn :不显示协议和端口名。即显示IP地址和端口

3、抓取网卡流量

#curl baidu.com

#tcpdump -i eth0  -w baidu.txt

4、Wireshark导入baidu.txt文件,结果展示image.png

四、异常数据解读

1、TCP Previous segment not captured 、TCP Out-Of-Order

[TCP Previous segment not captured]在TCP传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq + Len(三次握手和四次挥手是例外)。如果Wireshark发现后一个包的Seq号大于前一个包的Seq Len,就知道中间缺失了一段数据。

[TCP Out-of-Order]在TCP传输过程中(不包括三次握手和四次挥手),同一台主机发出的数据包应该是连续的,即后一个包的Seq号等于前一个包的Seq + Len。也可以说,后一个包的Seq会大于或等于前一个包的Seq。当Wireshark发现后一个包的Seq号小于前一个包的Seq Len时,就会认为是乱序了,因此提示 [TCP Out-of-Order] 。

image.png

Wireshark在获取包序号25时,解析的序列号seq = 20441,而按正常逻辑对25的seq = 17521 + 1460 = 18981,所以wireshark软件认为异常,将包25以黑色底纹标识,并添加解析文字[TCP Previous segment not captured],注意这里的解析文字是Wireshark软件自己添加的,而不是tcp数据体本身的。在没有接收到seq=18981的数据包之前,接收到了seq=2441数据包,所以提示 tcp 没有捕获前一个数据段。

Wireshark在获取包序号26时发现seq=18981,而包序号25的数据包seq = 20441,所以wireshark认为数据包顺序错了,提示[TCP Out-of-Order]

2、TCP Dup ACK x#y

[TCP Dup ACK]当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。它每收到一个这种包就会Ack一次期望的Seq值,以此方式来提醒发送方,于是就产生了一些重复的Ack。Wireshark会在这种重复的Ack上标记[TCP Dup ACK] 。

image.png

客户端117.136.81.177包序号41和42到达服务器之后(包序号异常,理应先42后41),服务器115.28.150.86上发送包序号43的应答,是针对包序号41所做的应答,在服务器发送包序号40时就说,我希望获取seq=28852的数据包,但是接下来获取数据包41的seq=30312,所以服务器在发达应答的时候,发送ACK=28852,SLE=30312 SRE=31560用于提示客户端,其中SLE:Sequence Left Edge(序列号左边界值) SRE:Sequence Right Edge(序列号有边界值)。Wireshark 添加解释:[TCP Dup ACK]40#1。其中40表示对包序号40重复,#号之后的1表示重复次数为1次。

3、TCP Spurious Retransmission

[TCP spurious retransmission]意味着发送端认为发送的包已经丢失了,然后就重传了,尽管此时接收端已经发送了对这些包的确认(确认还没收到或者已经丢失了)。

image.png

在客户端172.16.121.211发送包序号387之后,服务器给出了包序号386的应答,但是客户端只收到了包序号387的应答,应答数据seq=104605-105035,即对应包序号386,客户端认为387丢失,于是从新发送包序号387。这些数据发送到服务器之后,服务器tcp层数据检测冗余之后就会被丢弃。

4、TCP Fast Retransmission

当发送方收到3个或以上[TCP Dup ACK],就意识到之前发的包可能丢了,于是快速重传它。

5、TCP Retransmission

[TCP Retransmission]如果一个包真的丢了,又没有后续包可以在接收方触发[Dup Ack],就不会快速重传。这种情况下发送方只好等到超时了再重传,此类重传包就会被Wireshark标上[TCP Retransmission]。


相关文章

ACOS无数据告警实践

ACOS无数据告警实践

1.说明在实现数据监控的过程中告警能力无疑是重中之重,无数据告警亦是告警能力中重要的场景,这里我们聊聊关于无数据一些场景和实践方法。2.无数据可能场景对于运维监控平台来说无数据是一个比较复杂的情况,从...

flink应用场景分析

•       Flink适合场景:•       实时数据流处理,对实时的海量...

Kubernetes源码解读(二)--DeltaFIFO源码分析

Kubernetes源码解读(二)--DeltaFIFO源码分析

1、Queue接口与DeltaFIFO的实现1.1、Queue和Store接口接口和结构体先相关代码类似 workqueue 里的队列概念,这里也有一个队列,Queue 接口定义在 client-go...

CDP实操--配置HDFS的Ranger策略验证(一)

CDP实操--配置HDFS的Ranger策略验证(一)

1.1HDFS的Ranger策略验证确保hdfs的配置页面里已经勾选了“Enable Ranger Authorization”在terminal中,kerberos登录到hdfs用户并将/etc/h...

ranger对接hbase

ranger对接hbase

前提:本文是基于集群中已经部署了ranger组件和hbase组件的情况下,增加ranger对hbase组件的对接。安装部署1、ranger-hbase插件安装使用ranger2.3版本对接插件。将插件...

 MySQL性能优化(十)in参数列表过长导致的性能问题

MySQL性能优化(十)in参数列表过长导致的性能问题

有时候可能有人会问:where条件中使用in和or有什么区别,哪种写法性能更好?in参数个数有没有限制?下面就是一个由于in参数列表过长导致的性能问题。一个例子当时使用的是mysql 5.6版本SEL...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。