Wireshark的两种过滤器与BPF过滤规则


Wireshark是网络数据包分析器,可实时从网络接口捕获数据包中的数据。它能详细地显示捕获的数据以供用户检查它们的内容,并支持检索过滤,支持多协议的网络数据包解析。

Wireshark的抓包原理

先看看数据是怎么在网络上传输的,

            数据
             │
             ▼
      ┌─────────────┐
      │    网卡 NIC  │
      └──────┬──────┘
             │ 复制/接收数据帧
             ▼
      ┌─────────────┐
      │ Npcap/抓包驱动│
      └──────┬──────┘
             │
             ▼
      ┌─────────────┐
      │   Wireshark  │
      │  协议解析器   │
      └──────┬──────┘
             │
             ▼
   Ethernet → IP → TCP → HTTP
             │
             ▼
        对方收到数据

Wireshark做了两件事:

  1. 复制/接收数据帧;
  2. 将接收到的数据,按对应层的协议解析展示出来。

知道了他的抓包原理,下面介绍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"

posted on 2020-04-21 16:25  Mysticbinary  阅读(3862)  评论(2)    收藏  举报