NIUHE

日々私たちが过ごしている日常というのは、実は奇迹の连続なのかもしれんな

Wireshark 抓包指南

Wireshark 介绍

Wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。 官方下载地址

Wireshark 开始抓包

ps:在Linux上运行Wireshark抓包可能会遇到权限问题,解决方案可以参考这里

开始界面:

选择你正在用的网卡,然后点菜单中的鲨鱼图标就可以进行抓包了!

Wireshark 窗口介绍

WireShark 主要分为这几个界面

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

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

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

  4. Dissector Pane(16进制数据)

  5. Miscellanous(地址栏,杂项)

Wireshark 过滤器

Wireshark有两种过滤器,分别是显示过滤器与捕捉过滤器。

区别 * 捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。 * 显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。

两种过滤器的目的是不同的。 * 捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。 * 显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。

捕捉过滤器

  • Protocol(协议): 可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. 如果没有特别指明是什么协议,则默认使用所有支持的协议。

  • Direction(方向): 可能的值: src, dst, src and dst, src or dst 如果没有特别指明来源或目的地,则默认使用 src or dst 作为关键字。 例如, host 10.2.2.2 与 src or dst host 10.2.2.2 是一样的。

  • Host(s): 可能的值: net, port, host, portrange. 如果没有指定此值,则默认使用host关键字。 例如,src 10.1.1.1与src host 10.1.1.1相同。

  • Logical Operations(逻辑运算): 可能的值:not, and, or. 否(not)具有最高的优先级。或(or)和与(and)具有相同的优先级,运算时从左至右进行。 例如, not tcp port 3128 and tcp port 23 与 (not tcp port 3128) and tcp port 23相同。 not tcp port 3128 and tcp port 23 与 not (tcp port 3128 and tcp port 23)不同。

例子: * tcp dst port 3128 //捕捉目的TCP端口为3128的封包。 * ip src host 10.1.1.1 //捕捉来源IP地址为10.1.1.1的封包。 * host 10.1.2.3 //捕捉目的或来源IP地址为10.1.2.3的封包。 * ether host e0-05-c5-44-b1-3c //捕捉目的或来源MAC地址为e0-05-c5-44-b1-3c的封包。如果你想抓本机与所有外网通讯的数据包时,可以将这里的mac地址换成路由的mac地址即可。 * src portrange 2000-2500 //捕捉来源为UDP或TCP,并且端口号在2000至2500范围内的封包。 * not imcp //显示除了icmp以外的所有封包。(icmp通常被ping工具使用) * src host 10.7.2.12 and not dst net 10.200.0.0/16 //显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。 * (src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 //捕捉来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络 10.0.0.0/8内的所有封包。 * src net 192.168.0.0 mask 255.255.255.0 //捕捉源地址为192.168.0.0网络内的所有封包。

显示过滤器

实例:

过滤表达式的规则

表达式规则

  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方法的。

封包列表

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

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

详细信息

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

各行信息分别为 * Frame: 物理层的数据帧概况 * Ethernet II: 数据链路层以太网帧头部信息 * Internet Protocol Version 4: 互联网层IP包头部信息 * Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP * Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

对应的OSI七层模型

TCP 包解析

从下图可以看到wireshark捕获到的TCP包中的每个字段。

TCP 三路握手分析

三路握手的过程为:

我们用wireshark实际分析下三次握手的过程

打开wireshark, 开始抓包后打开浏览器输入 http://www.liuhe.website

在wireshark中输入http过滤, 然后选中Destination为139.129.38.159 且 GET / HTTP/1.1的那条记录,右键然后点击 “对话过滤器->TCP”.

这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图

图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

第一次握手 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三路握手的一部分。客户端把这段连接的序号设定为随机数A。

第二次握手 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK 的确认码应为 A+1,SYN/ACK 包本身又有一个随机序号 B。

第三次握手 最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包序号被设定为收到的确认号 A+1,而响应则为 B+1。

就这样通过了TCP三次握手,建立了连接。

参考

Wireshark基本介绍和学习TCP三次握手

Wireshark抓包工具使用教程以及常用抓包规则

Powered by Hexo and Theme by Hacker
© 2019 NIUHE