抓包分析-wireshark
WireShark是一个网络封包分析软件,可以直接与网卡进行数据报文交互。是一个非常强大的抓包工具。
软件的安装
个人环境为:Manjaro Linux X86_64
1 | yay -S wireshark-qt |
我们需要使用Root权限去打开WireShark,否则会无法抓取到我们网卡的网络封包,例如
我们有两种方式的通过Root权限打开WireShark,第一种是在命令行通过sudo wireshark &
执行,但是控制台关闭WireShark也会关闭。
第二种是使用sudo
的图形化版本gksu
,然后在wireshark的.desktop
内修改Excu
- 安装
gksu
1 | yay -S gksu |
- 打开
/usr/share/applications
,用编辑器打开WireShark的快捷方式,将Excu
一行修改成这样
1 | Exec=gksu wireshark %f |
接下来我们打开命令行会看到这样的窗口
证明成功,输入密码打开即可看到我们的网卡。
基础使用
首先我们选到捕获
-选项
这里会展示出所有的接口,展开接口我们会看到我们的ip地址,通过这个地址,我们可以找到我们的网卡。选择网卡,点击开始,WireShark就会开启捕获流经的数据包
为了方便我们查看,WireShark将不同数据包分成不同颜色以便分辨(虽然我没啥用)。我们来测试一下抓包,比如我们尝试ping baidu.com
- 执行需要抓包操作
- 我们可以通过过滤栏设置过滤条件筛选我们需要的数据包,具体的筛选操作我们在下面提到。我们这里使用
icmp
,筛选到我们发出的ping操作
主要界面
过滤器。用于设置过滤条件筛选数据包
数据包列表,用于显示捕获到的数据包。不同协议数据包使用不同颜色进行区分;
信息从左到右分别是编号,时间戳,源地址,目标地址,协议,长度,信息
数据包详细信息。在数据包列表选择指定的数据包,在数据包中会有详细信息内容。可以用于查看协议中的每一个字段。其内容分别为:
- Frame:物理层数据帧概况
- Ethernet II:数据链路层以太网帧头部信息
- Internet Protocol Version 4(IPv4):网络层IP包头信息
- Transmission Control Protocol:传输层的数据短头部信息,此处是TCP,User Datagram Protocol为UDP
- Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议HTTP
数据包字节区
过滤器
WiresShark具有两种过滤器。值得我们注意的是,两种过滤器的语法都有所不同,捕获过滤器(抓包前)和显示过滤器(抓包后)的语法具有一定的区别。
捕获过滤器
捕获过滤器的语法格式为
<Protocol> <Direction> <Host> <Value> <Logical Operation> <other expression>
- Protocol:协议。若未指明协议,则为默认使用所有支持的协议。
- DIrecion:方向。用于指定来源或目的地。取值有
src(来源)、dst(目的地)
以及src and dst
和src or dst
。默认会使用src or dst
- Host(s):主机地址。
- Logical Operation:逻辑运算。
- and 与
- or 或
- not 非
- () 改变优先级。默认优先级为not最高,从左至右运算
- Other expression:其他表达式。
基于类型过滤
可能使用的类型有主机host,网段net,端口port,端口范围portrange,特殊类型
-
主机Host
捕获主机10.0.0.1的包:host 10.0.0.1 -
网段net
后面可以跟的值有三种形式:net mask CIDR- net:
net 10.0.0.0 //对应掩码255.255.255.255
net 10.0.0 //对应掩码255.255.255.0
…类推 - mask:
net 10.0.0.0 mask 255.255.255.0 - CIDR:
net 10.0.0.0/24
- net:
-
端口port
捕获端口为80的包:port 80 -
端口范围portrange
捕获端口范围为1-100的包:portrange 1-100 -
特殊类型 gateway Host
基于方向过滤
可以在host、net、port、portrange前添加这些关键词
-
源src
捕获源地址为10.0.0.1的数据包:src host 10.0.0.1
其他3个都是类似如此使用,不再作出演示 -
目标dst
-
源或者目标src or dst
-
源和目标src and dst
-
特殊方向
除了上述4种,还有两种特殊方向:- 广播:broadcast
- 多播:multicast
捕获以太网广播流量:ether broadcast
捕获以太网多播流量:ether multicast
基于协议过滤
WIreShark支持如下协议过滤:
ether、fddi、 wlan、 ip(ipv4、ipv6)、arprarp、decnet、 lat、 sca、 moproc、 mopdl、 tcp、udp
通过协议与前面的过滤规则逻辑运算,可以达到精准过滤
例子:过滤源主机为10.0.0.1并且为tcp协议端口号为80的数据 src host 10.0.0.1 and tcp port 80
基于数据过滤
-
长度过滤
可以使用less(<=)、greater(>=)关键词
长度小于等于12:less 12 -
内容过滤
语法格式:proto[expr:size] relop express
- proto:协议
- expr:指定协议的偏移地址*
- size:指定数据长度
- relop:运算符,
关系运算符有>,<,>=,<=,==,!=
二进制运算符有+,-,*,/,%,&,|,^,<<,>>
协议的偏移地址:指在网络数据包中用于标识数据包中所包含的协议类型的字段的位置偏移量。这个偏移地址的值通常是一个固定的值,以字节为单位表示,用于从数据包的开始位置或数据链路层的头部开始计算。
显示过滤器
这里只列举出常见的显示过滤器规则
地址过滤
-
对源地址、目的地址过滤
ip.src == 10.0.0.1 ip.dst == 10.0.0.1 -
对源地址或者目的地址过滤(or)
ip.addr == 10.0.0.1 -
排除某个地址的数据包
!(ip.addr == 10.0.0.1)
端口过滤
传输层协议名(tcp、udp).端口方向 值大小判断 端口号
-
对源端口、目的端口过滤
tcp.srcport == 80 tcp.dstport == 80 -
对源端口或者目标端口过滤(or)
tcp.port == 80 -
大于某个端口过滤
tcp.port <= 100
协议过滤
直接在过滤框内输入协议名即可
http相关
-
过滤出请求地址中包含“user”的请求
http.request.uri contains user -
过滤域名
http.host == www.baidu.com -
模糊过滤域名
http.host contains baidu -
过滤content_type类型
http.content_type == ‘text/html’ -
过滤请求方法
http.request.method == get -
过滤响应码
http.request.code == 200 -
过滤含有特定内容的cookie数据包
http.cookie contains userid