在 Ubuntu 上做“包过滤 / 抓包过滤”通常分两种情况:
1)抓包时过滤(capture filter)
2)抓包后过滤(display filter)
下面以最常见的工具 tcpdump 和 Wireshark / tshark 来说明。
sudo tcpdump -i eth0
tcpdump 使用的是 BPF(Berkeley Packet Filter)
# 只抓某个 IP
sudo tcpdump -i eth0 host 192.168.1.10
# 源 IP
sudo tcpdump -i eth0 src 192.168.1.10
# 目的 IP
sudo tcpdump -i eth0 dst 192.168.1.10
# 端口 80
sudo tcpdump -i eth0 port 80
# 源端口
sudo tcpdump -i eth0 src port 443
# 目的端口
sudo tcpdump -i eth0 dst port 22
sudo tcpdump -i eth0 icmp
sudo tcpdump -i eth0 tcp
sudo tcpdump -i eth0 udp
# TCP 且端口 443
sudo tcpdump -i eth0 tcp port 443
# IP 且端口
sudo tcpdump -i eth0 host 192.168.1.10 and port 80
# 排除 SSH
sudo tcpdump -i eth0 not port 22
sudo tcpdump -i eth0 -w capture.pcap
sudo tshark -i eth0 -f "host 192.168.1.10 and tcp port 80"
tshark -r capture.pcap -Y "http.request"
在 Wireshark 顶部输入框使用:
ip.addr == 192.168.1.10
tcp.port == 443
http
dns
tcp.flags.syn == 1
如果你只是想丢弃或观察特定包:
sudo iptables -A INPUT -p tcp --dport 80 -j LOG
✅ 只抓 HTTP 请求
sudo tcpdump -i eth0 tcp port 80 -A
✅ 抓 HTTPS 握手
sudo tcpdump -i eth0 tcp port 443 and 'tcp[tcpflags] & tcp-syn != 0'
✅ 抓 ARP
sudo tcpdump -i eth0 arp
如果你能告诉我:
我可以给你精确的一条命令。