WireShark下载地址
WireShark是一个开源网络协议分析器,可以捕获和分析网络数据包。它可以在Windows,Mac OS X,Linux和其他操作系统上运行。
WireShark的主要功能包括:
1.捕获网络数据包:WireShark可以捕获来自本地计算机或网络上的数据包,包括以太网,WiFi,蓝牙,USB等。
2.分析网络数据包:WireShark可以对捕获的数据包进行深入分析,包括查看数据包头,协议分层,数据字段和错误信息。
3.过滤网络数据包:WireShark可以通过使用过滤器来筛选数据包,仅显示与您正在查看的问题相关的信息。
4.生成报告:WireShark可以生成有关网络流量的报告,例如网络流量趋势和统计信息。
打开网络和Internet设置(Windows10)
开启wifi热点
手机端连接wifi热点
启动wireshark选择网卡
源地址过滤
ip.src == 192.168.0.1
目标地址过滤
ip.dst == 192.168.0.1
源地址或目标地址过滤
ip.addr == 192.168.0.1
排除某个地址过滤
!(ip.addr == 192.168.0.1)
源端口过滤
tcp.srcport == 80
目标端口过滤
tcp.dstport == 80
对源端口或者目标端口过滤
tcp.port == 80
大于某个端口过滤
tcp.port >= 60000
直接在filter框中输入协议名,如过滤HTTP协议,则http
过滤出请求地址中包含“user”的请求
http.request.uri contains user
过滤域名
http.host == www.baidu.com
模糊过滤域名
http.host contains baidu
过滤请求的content_type类型
http.content_type == 'text/html'
过滤http请求方法
http.request.method == GET
过滤http响应状态码
http.response.code == 200
过滤含有指定cookie的http数据包
http.cookie contains userid
针对数据段长度过滤
udp.length < 20
http.content_length <= 30
过滤出显示 TCP Previous segment not captured 报文
tcp.analysis.lost_segment
原因:前一个分片丢失,有可能是网络中确实丢失了,或者晚到了,也有可能是wireshark本身并没有抓到。
过滤出显示TCP Dup ACK 报文
tcp.analysis.duplicate_ack
原因:当网络中存在乱序或者丢包时,将会导致接收端接收到的seq number不连续。此时接收端会向发送端回复重复ack,ack值为期望收到的下一个seq number。重复ack数大于等于3次将会触发快速重传。
过滤出显示 TCP Out-Of-Order 报文
tcp.analysis.duplicate_ack
原因:一般来说是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元
过滤出 TCP ZeroWindows 的报文
tcp.window_size == 0
原因:当发送端发包速率大于接收端的接收速率时,会造成接收端TCP window越来越小,当接收端在反馈ack时携带的window size=0时,wireshark标记TCP Zero window。此时发送端将暂停发送数据,直到收到接收端window size!=0的标志。
过滤出 TCP Window Full 的报文
tcp.analysis.window_full
原因:是指的发送端发送的数据已经达到的接受窗口的上限。发送端暂停发送,等待新的接收窗口的通告。
打开 Wireshark ,初始界面从上到下是主工具栏、显示过滤器和捕获过滤器以及状态工具栏。
详细介绍:
1.主工具栏包含了开始捕获、停止捕获、显示最新分组等操作的按键;
2.显示过滤器可输入过滤规则,使分组列表窗口仅显示符合规则的数据包;
3.捕获过滤器可输入规则,在抓包的时候捕获符合规则的数据包;
4.状态工具栏则显示软件当前状态与已捕获&显示的分组数量。
开始捕获后,Wireshark 会将捕获到的报文显示在界面上。
详细介绍:
1.分组列表显示所有捕获到的报文,顶部为报文序号等各种关键字段;
2.分组详情显示选中报文的分层情况;
3.分组字节流显示选中报文的16进制与ASCII码编码的字节流。
1)分组列表显示每个数据包的各种字段,并默认按照序号/捕获时间升序排列分组。(若想要以某个字段降序排列,点击该字段即可。)
2)为了方便查看报文中的关键字段,可以①右键字段栏,②点击 Column Preferences ,③添加字段。
例如:添加HTTP协议的host字段和TLS协议的 server_name 字段。
添加完字段后的显示
3)额外说明:捕获界面的最左侧的No.列
选中某个数据包时,Wireshark分组列表的No.列会显示一些符号,这些符号标识的是数据包与数据包之间的关系,这里罗列一下 Wireshark 官网的解释:
分组详情窗口是TCP/IP五层模型最好的结构化展示,从上到下分别是:
展开各层,能看到 Wireshark抓包工具 对各个字段的解析和注释。
标准协议的 RFC 文档阅读起来比较费劲,对照 Wireshark 抓包工具的解析,能更好地理解标准协议的字段格式。
RFC 791 中对 IP 协议头部的描述
部分分组的分组详情窗口内包含 URI 超链接,或者与其有关系的另一个分组的超链接,双击即可跳转。
前一个请求在86帧,响应在291帧,下一个请求在296帧
1)分组字节流窗口中显示的是十六进制与ASCII字符对照形式的分组字节内容(不包含物理层的字节),即数据包在链路上传播时的原始字节流。
2)分组字节流窗口中的字节和分组详情中的字段是一一对应的:点击字段会选中字节内容;点击某个字节16进制值会选中对应的字段。
3)可以使用这个窗口来观察一些私有协议的字段格式。
十六进制值与ASCII码也是对应的,GET 的 ASCII码为 0x474554
4)总结:
从分组列表到分组详情,再到分组字节流,可以看到 Wireshark 抓包工具 是如何从大到小为我们显示多个分组——单个分组的多层结构——未解析时的原始字节流。从下而上逆推,我们可以体会到网卡和协议栈是如何实现数据包解析的。
实践中有4个按键比较常用:开始捕获、停止捕获、重新开始捕获和显示最新的分组。
捕获的三个按键比较好理解,不做解释。
选中显示最新的分组后,分组列表会一直滚动显示最新捕获的分组。如果要查看某个报文,可以滚动鼠标滑轮,此时分组详情会停止滚动。