如何精准设置Ubuntu Sniffer过滤特定类型的数据包?

更新于
2026-09-12 04:40:54
28阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关问答
按理说,

在网络安全和程序管理领域。监控和分析网络数据包是排查故障、定位攻击还有调整性能的关键环节。只是很多管理员在使用 Ubuntu Sniffer时常碰到以下痛点:

  • 不知道如何精准过滤只关心的流量,导致捕获的报文海量且难以分析。
  • 缺少必要的权限或不熟悉命令语法,导致抓包失败或抓到的内容不完整。
  • 捕获的数据无法及时保存或回放,错失关键的取证时机。
  • 对图形化工具的过滤表达式不熟悉,导致界面操作效率低下。怎么说呢,

安装必备工具

安装 tcpdump

tcpdump 是一款强大的命令行抓包工具。可实时捕获网络接口上的所有报文。

如何精准设置Ubuntu Sniffer过滤特定类型的数据包?
sudo apt-get update
sudo apt-get install tcpdump

安装 Wireshark

Wireshark 提供图形化界面便于直观查看、过滤和分析各类协议的数据包。其实,

sudo apt-get update
sudo apt-get install wireshark

解决“没有权限抓包”的痛点

默认情况下普通使用者无法直接使用 tcpdump/washark 抓取报文。其实,可通过以下两种方式获取所需权限:

  1. 使用 sudo:
    sudo tcpdump -i eth0 -n
    
  2. 将使用者加入 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:

如何精准设置Ubuntu Sniffer过滤特定类型的数据包?
 && tls.record.version == "TLS 1.2"

If you need to export specific packets:

  1. Select desired packets .
  2. Select “File → Export Specified Packets…”.
  3. Select “Displayed” as packet range and choose output format .
  4. .

进一步学习与常见问题解答

  • 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 …老实说,

如何只抓取 IPv6 流量?- 在表达式中加入 ip6:

 sudo t cpd ump – i ethO ip6 

怎样避免捕获自己的 SSH 会话?- 排除本机 IP 和端口22:

 sudo tc pd ump – i en p not host $and not port22 

想要把抓到的数据实时推送到远程服务器做集中分析怎么办?- 配合 socat 或 nc 实现流式传输:

 sudo t cp d ump – i eth O – w – | nc remote.host.com9 9

标签:ubuntu
按理说,

在网络安全和程序管理领域。监控和分析网络数据包是排查故障、定位攻击还有调整性能的关键环节。只是很多管理员在使用 Ubuntu Sniffer时常碰到以下痛点:

  • 不知道如何精准过滤只关心的流量,导致捕获的报文海量且难以分析。
  • 缺少必要的权限或不熟悉命令语法,导致抓包失败或抓到的内容不完整。
  • 捕获的数据无法及时保存或回放,错失关键的取证时机。
  • 对图形化工具的过滤表达式不熟悉,导致界面操作效率低下。怎么说呢,

安装必备工具

安装 tcpdump

tcpdump 是一款强大的命令行抓包工具。可实时捕获网络接口上的所有报文。

如何精准设置Ubuntu Sniffer过滤特定类型的数据包?
sudo apt-get update
sudo apt-get install tcpdump

安装 Wireshark

Wireshark 提供图形化界面便于直观查看、过滤和分析各类协议的数据包。其实,

sudo apt-get update
sudo apt-get install wireshark

解决“没有权限抓包”的痛点

默认情况下普通使用者无法直接使用 tcpdump/washark 抓取报文。其实,可通过以下两种方式获取所需权限:

  1. 使用 sudo:
    sudo tcpdump -i eth0 -n
    
  2. 将使用者加入 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:

如何精准设置Ubuntu Sniffer过滤特定类型的数据包?
 && tls.record.version == "TLS 1.2"

If you need to export specific packets:

  1. Select desired packets .
  2. Select “File → Export Specified Packets…”.
  3. Select “Displayed” as packet range and choose output format .
  4. .

进一步学习与常见问题解答

  • 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 …老实说,

如何只抓取 IPv6 流量?- 在表达式中加入 ip6:

 sudo t cpd ump – i ethO ip6 

怎样避免捕获自己的 SSH 会话?- 排除本机 IP 和端口22:

 sudo tc pd ump – i en p not host $and not port22 

想要把抓到的数据实时推送到远程服务器做集中分析怎么办?- 配合 socat 或 nc 实现流式传输:

 sudo t cp d ump – i eth O – w – | nc remote.host.com9 9

标签:ubuntu