Wireshark的两种过滤器与BPF过滤规则
Wireshark是网络数据包分析器,可实时从网络接口捕获数据包中的数据。它能详细地显示捕获的数据以供用户检查它们的内容,并支持检索过滤,支持多协议的网络数据包解析。
Wireshark的抓包原理
先看看数据是怎么在网络上传输的,
数据
│
▼
┌─────────────┐
│ 网卡 NIC │
└──────┬──────┘
│ 复制/接收数据帧
▼
┌─────────────┐
│ Npcap/抓包驱动│
└──────┬──────┘
│
▼
┌─────────────┐
│ Wireshark │
│ 协议解析器 │
└──────┬──────┘
│
▼
Ethernet → IP → TCP → HTTP
│
▼
对方收到数据
Wireshark做了两件事:
- 复制/接收数据帧;
- 将接收到的数据,按对应层的协议解析展示出来。
知道了他的抓包原理,下面介绍Wireshark工具的过滤功能。
抓包过滤器
Wirshark有两种过滤器:
- 一是抓包过滤器
- 二个是显示过滤器
两种过滤器的区别:
-
捕捉过滤器是数据经过的第一层过滤器,它用于精确捕捉数据的类型,以避免产生过大的日志文件,一般针对特定性的抓包。
-
显示过滤器是信息的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。它不会丢弃信息,只是将不符合规则的数据隐藏起来而已。
说完区别,他们也是有共同点的,就是都遵循BPF语法:

使用演示
添加一条自定义的抓包规则

选择自定义的抓包规则

如何过滤出有用的数据?
感觉最好是了解一些网络分层,网络各层协议的大致,然后根据关键字筛选就行。
从低到高展示:
应用层
│
├── HTTP
├── DNS
├── DHCP
├── SSH
├── FTP
├── SMB
├── LDAP
├── Kerberos
│
├── TLS
├── QUIC
│
传输层
│
├── TCP
└── UDP
│
网络层
│
├── IPv4
├── IPv6
├── ICMP
└── ICMPv6
│
链路层
│
├── Ethernet
├── ARP
└── VLAN
│
网卡
协议层级地图:
| 层次 | 协议 | 常用过滤器 |
| ----- | --------- | ------------------------------------------------------- |
| 链路层 | Ethernet | `eth` |
| 链路层 | MAC | `eth.addr == xx:xx:xx:xx:xx:xx` |
| 链路层 | ARP | `arp` |
| 链路层 | VLAN | `vlan` |
| 网络层 | IPv4 | `ip` |
| 网络层 | IP地址 | `ip.addr == 1.1.1.1` |
| 网络层 | 源IP | `ip.src == 1.1.1.1` |
| 网络层 | 目的IP | `ip.dst == 1.1.1.1` |
| 网络层 | IPv6 | `ipv6` |
| 网络层 | ICMP | `icmp` |
| 传输层 | TCP | `tcp` |
| 传输层 | TCP端口 | `tcp.port == 443` |
| 传输层 | SYN | `tcp.flags.syn == 1` |
| 传输层 | RST | `tcp.flags.reset == 1` |
| 传输层 | UDP | `udp` |
| 传输层 | UDP端口 | `udp.port == 53` |
| 安全/会话 | TLS | `tls` |
| 安全/会话 | TLS SNI | `tls.handshake.extensions_server_name contains "baidu"` |
| 应用层 | HTTP | `http` |
| 应用层 | HTTP Host | `http.host contains "baidu"` |
| 应用层 | HTTP URI | `http.request.uri contains "/login"` |
| 应用层 | DNS | `dns` |
| 应用层 | DNS域名 | `dns.qry.name contains "baidu"` |
| 应用层 | DHCP | `dhcp` / `bootp` |
| 应用层 | SSH | `ssh` |
| 应用层 | FTP | `ftp` |
| 应用层 | SMB | `smb2` |
| 应用层 | LDAP | `ldap` |
| 应用层 | Kerberos | `kerberos` |
| 应用层 | NTP | `ntp` |
| 应用层 | QUIC | `quic` |
常用命令记录:
ip协议抓包: ip.addr == x.x.x.x
https协议抓包: tls.handshake.extensions_server_name contains "baidu"
http协议抓包: http.host contains "biadu"
浙公网安备 33010602011771号