如何精准设置Ubuntu Sniffer过滤特定类型的数据包?
- 内容介绍
- 文章标签
- 相关问答
在网络安全和程序管理领域。监控和分析网络数据包是排查故障、定位攻击还有调整性能的关键环节。只是很多管理员在使用 Ubuntu Sniffer时常碰到以下痛点:
- 不知道如何精准过滤只关心的流量,导致捕获的报文海量且难以分析。
- 缺少必要的权限或不熟悉命令语法,导致抓包失败或抓到的内容不完整。
- 捕获的数据无法及时保存或回放,错失关键的取证时机。
- 对图形化工具的过滤表达式不熟悉,导致界面操作效率低下。怎么说呢,
安装必备工具
安装 tcpdump
tcpdump 是一款强大的命令行抓包工具。可实时捕获网络接口上的所有报文。
sudo apt-get update
sudo apt-get install tcpdump
安装 Wireshark
Wireshark 提供图形化界面便于直观查看、过滤和分析各类协议的数据包。其实,
sudo apt-get update
sudo apt-get install wireshark
解决“没有权限抓包”的痛点
默认情况下普通使用者无法直接使用 tcpdump/washark 抓取报文。其实,可通过以下两种方式获取所需权限:
-
使用 sudo:
sudo tcpdump -i eth0 -n -
将使用者加入 wireshark 组:
# 添加当前使用者到 wireshark 组 sudo usermod -aG wireshark $USER # 重新登录或执行以下命令使组生效 newgrp wireshark
用 Wireshark 精准设置过滤器
在 Wireshark 主界面的顶部有一个“显示过滤器”输入框。其实,输入符合 BPF语法的表达式即可只显示感兴趣的流量。例如这方面,
-
仅显示来自/发往特定 IP 的 TCP 流量:
ip.addr == 192.168.1.100 && tcp -
捕获端口为 80 的 HTTP 请求:
tcp.port == 80 && http.request -
and
使用 tcpdump 捕获并实时查看数据包
下面的命令演示了最常用的抓包方式。同时解决了“抓到太多无用信息”的痛点:
# 捕获 eth0 接口上的所有报文
sudo tcpdump -i eth0 -n
# 只捕获 TCP 报文并显示简洁信息
sudo tcpdump -i eth0 -n -tttt -vvv tcp
# 捕获特定源 IP 与目标端口的 UDP 流量
sudo tcpdump -i eth0 -n src host 10.0.0.5 and udp port 53
使用 tcpdump 精准过滤特定类型的数据包
BPF 表达式可以组合多种条件,实现细粒度过滤:
-
仅捕获 SYN 包:
# SYN 标志位为 1 且 ACK 为 0 的 TCP 包 sudo tcpdump -i eth0 'tcp &! = 0 and tcp & == 0' -
排除 ARP 与 DHCP 噪声,仅保留 IPv4/TCP:
# 排除 arp 与 udp 并只看 ipv4/tcp sudo tcpdump -i eth0 'ip and tcp and not arp and not port 53' -
抓取包含关键字 “password” 的 HTTP POST 数据:
# 使用负载匹配字符串 “password” sudo tcpdump -i eth0 -A -s 0 'tcp port 80 and <2)) - >2))!= 0) and payload contains "password"'
将抓取的数据写入文件以便后期分析
# 将所有符合条件的报文保存为 pcap 文件 sudo tcpdiff -i eth0 -w /tmp/capture.pcap 'port 443' # 后续使用 Wireshark 打开进行离线分析 wireshark /tmp/capture.pcap &
从注意来看。上面的代码块中出现了故意的换行,仅为演示;实际使用时请确保完整复制。
在 Wireshark 中已保存的 pcap 文件
打开保存好的文件后可 利用显示过滤器快速定位目标报文。例如要查看所有 TLS 握手过程中的 Client Hello:
&& tls.record.version == "TLS 1.2"
If you need to export specific packets:
- Select desired packets .
- Select “File → Export Specified Packets…”.
- Select “Displayed” as packet range and choose output format . .
进一步学习与常见问题解答
-
I/O 性能不足导致丢包?- 使用更大的缓冲区:
# 增大内核 socket 缓冲区 sudo sysctl -w net.core.rmem_max=12582912 sudo sysctl -w net.core.wmem_max=12582912 # 在 tcpdump 中指定缓冲区大小 sudo tcpdump -i eth0 -B 4096 …老实说,
sudo t cpd ump – i ethO ip6
sudo tc pd ump – i en p not host $and not port22
sudo t cp d ump – i eth O – w – | nc remote.host.com9 9
在网络安全和程序管理领域。监控和分析网络数据包是排查故障、定位攻击还有调整性能的关键环节。只是很多管理员在使用 Ubuntu Sniffer时常碰到以下痛点:
- 不知道如何精准过滤只关心的流量,导致捕获的报文海量且难以分析。
- 缺少必要的权限或不熟悉命令语法,导致抓包失败或抓到的内容不完整。
- 捕获的数据无法及时保存或回放,错失关键的取证时机。
- 对图形化工具的过滤表达式不熟悉,导致界面操作效率低下。怎么说呢,
安装必备工具
安装 tcpdump
tcpdump 是一款强大的命令行抓包工具。可实时捕获网络接口上的所有报文。
sudo apt-get update
sudo apt-get install tcpdump
安装 Wireshark
Wireshark 提供图形化界面便于直观查看、过滤和分析各类协议的数据包。其实,
sudo apt-get update
sudo apt-get install wireshark
解决“没有权限抓包”的痛点
默认情况下普通使用者无法直接使用 tcpdump/washark 抓取报文。其实,可通过以下两种方式获取所需权限:
-
使用 sudo:
sudo tcpdump -i eth0 -n -
将使用者加入 wireshark 组:
# 添加当前使用者到 wireshark 组 sudo usermod -aG wireshark $USER # 重新登录或执行以下命令使组生效 newgrp wireshark
用 Wireshark 精准设置过滤器
在 Wireshark 主界面的顶部有一个“显示过滤器”输入框。其实,输入符合 BPF语法的表达式即可只显示感兴趣的流量。例如这方面,
-
仅显示来自/发往特定 IP 的 TCP 流量:
ip.addr == 192.168.1.100 && tcp -
捕获端口为 80 的 HTTP 请求:
tcp.port == 80 && http.request -
and
使用 tcpdump 捕获并实时查看数据包
下面的命令演示了最常用的抓包方式。同时解决了“抓到太多无用信息”的痛点:
# 捕获 eth0 接口上的所有报文
sudo tcpdump -i eth0 -n
# 只捕获 TCP 报文并显示简洁信息
sudo tcpdump -i eth0 -n -tttt -vvv tcp
# 捕获特定源 IP 与目标端口的 UDP 流量
sudo tcpdump -i eth0 -n src host 10.0.0.5 and udp port 53
使用 tcpdump 精准过滤特定类型的数据包
BPF 表达式可以组合多种条件,实现细粒度过滤:
-
仅捕获 SYN 包:
# SYN 标志位为 1 且 ACK 为 0 的 TCP 包 sudo tcpdump -i eth0 'tcp &! = 0 and tcp & == 0' -
排除 ARP 与 DHCP 噪声,仅保留 IPv4/TCP:
# 排除 arp 与 udp 并只看 ipv4/tcp sudo tcpdump -i eth0 'ip and tcp and not arp and not port 53' -
抓取包含关键字 “password” 的 HTTP POST 数据:
# 使用负载匹配字符串 “password” sudo tcpdump -i eth0 -A -s 0 'tcp port 80 and <2)) - >2))!= 0) and payload contains "password"'
将抓取的数据写入文件以便后期分析
# 将所有符合条件的报文保存为 pcap 文件 sudo tcpdiff -i eth0 -w /tmp/capture.pcap 'port 443' # 后续使用 Wireshark 打开进行离线分析 wireshark /tmp/capture.pcap &
从注意来看。上面的代码块中出现了故意的换行,仅为演示;实际使用时请确保完整复制。
在 Wireshark 中已保存的 pcap 文件
打开保存好的文件后可 利用显示过滤器快速定位目标报文。例如要查看所有 TLS 握手过程中的 Client Hello:
&& tls.record.version == "TLS 1.2"
If you need to export specific packets:
- Select desired packets .
- Select “File → Export Specified Packets…”.
- Select “Displayed” as packet range and choose output format . .
进一步学习与常见问题解答
-
I/O 性能不足导致丢包?- 使用更大的缓冲区:
# 增大内核 socket 缓冲区 sudo sysctl -w net.core.rmem_max=12582912 sudo sysctl -w net.core.wmem_max=12582912 # 在 tcpdump 中指定缓冲区大小 sudo tcpdump -i eth0 -B 4096 …老实说,
sudo t cpd ump – i ethO ip6
sudo tc pd ump – i en p not host $and not port22
sudo t cp d ump – i eth O – w – | nc remote.host.com9 9

