tcpdump支持多种协议过滤,如tcp、udp、icmp、arp、ip、ip6等,可通过-i指定接口,结合and、or、not组合条件,精确捕获目标流量,并用-c、-s、-w等优化性能与存储。

在Linux系统上,
tcpdump
使用
tcpdump
sudo tcpdump -i <interface> <protocol_filter>
<interface>
eth0
ens33
any
<protocol_filter>
例如,如果你想捕获所有通过
ens33
sudo tcpdump -i ens33 tcp
捕获UDP流量:
sudo tcpdump -i ens33 udp
捕获ICMP流量(比如
ping
sudo tcpdump -i ens33 icmp
对于ARP协议(地址解析协议),你可以这样:
sudo tcpdump -i ens33 arp
如果你只关心IPv4协议的数据包,可以明确指定:
sudo tcpdump -i ens33 ip
或者IPv6:
sudo tcpdump -i ens33 ip6
甚至更底层的以太网协议类型,比如捕获所有以太网广播包:
sudo tcpdump -i ens33 ether proto \arp
\arp
arp
这些过滤器可以单独使用,也可以通过逻辑运算符(
and
or
not
tcpdump
tcpdump
tcp
sudo tcpdump -i any tcp
udp
sudo tcpdump -i eth0 udp
eth0
icmp
ping
sudo tcpdump -i eth0 icmp
eth0
arp
sudo tcpdump -i eth0 arp
eth0
ip
ip6
sudo tcpdump -i eth0 ip
eth0
sudo tcpdump -i eth0 ip6
eth0
ether
ether host aa:bb:cc:dd:ee:ff
ether proto \arp
理解这些协议在OSI模型中的位置,有助于我们更好地构建过滤表达式。TCP和UDP在传输层,IP在网络层,ARP和以太网相关则在数据链路层。
tcpdump
实际的网络环境很少是单一协议或单一目标,我们往往需要更精细的组合过滤,比如“捕获来自某个IP地址的HTTP流量”或者“排除某个端口的UDP流量”。
tcpdump
and
or
not
()
and
&&
示例1:捕获特定主机上的HTTP (TCP 80) 流量。
sudo tcpdump -i eth0 tcp and port 80 and host 192.168.1.100
192.168.1.100
示例2:捕获源IP为特定地址的UDP DNS查询流量。
sudo tcpdump -i eth0 udp and port 53 and src host 192.168.1.50
src host
or
||
sudo tcpdump -i eth0 tcp port 80 or tcp port 443
sudo tcpdump -i eth0 'tcp port 80 or 443'
or
sudo tcpdump -i eth0 'host 192.168.1.100 and (tcp or udp)'
tcp or udp
host 192.168.1.100
and
not
!
示例1:捕获所有TCP流量,但排除SSH (TCP 22) 流量。
sudo tcpdump -i eth0 tcp and not port 22
示例2:捕获所有非ARP的流量。
sudo tcpdump -i eth0 not arp
优先级和括号: 在复杂的组合中,运算符的优先级是
not
and
or
sudo tcpdump -i eth0 'host 192.168.1.100 and (tcp or udp)'
sudo tcpdump -i eth0 host 192.168.1.100 and tcp or udp
(host 192.168.1.100 and tcp) or udp
tcpdump
在实际操作中,用
tcpdump
常见挑战:
权限问题:
tcpdump
Permission denied
sudo
流量过大,输出刷屏: 如果你不加任何过滤条件,或者过滤条件过于宽松,在繁忙的网络接口上,
tcpdump
文件膨胀与性能开销: 当你使用
-w
tcpdump
过滤表达式写错: 这是一个常见且令人沮丧的问题。一个微小的语法错误,比如少了一个
and
网络接口选择错误: 如果你的服务器有多个网卡,选错了监听接口,自然就什么也抓不到。特别是Docker容器或虚拟化环境,可能会有
docker0
virbr0
优化技巧:
明确指定网络接口(-i
-i <interface>
tcpdump
any
限制抓包数量(-c
-c <count>
-c 100
限制抓包长度(-s
-s <snaplen>
-s 0
-s 1500
-s 96
tcpdump -s 0
保存到文件(-w
.pcap
tcpdump
sudo tcpdump -i eth0 tcp port 80 -w http_traffic.pcap
-C <filesize>
-W <filenum>
精确的过滤表达式: 投入时间学习BPF(Berkeley Packet Filter)语法,这是
tcpdump
host
src host
dst host
port
src port
dst port
net
and
or
not
后台运行与日志管理: 如果需要长时间捕获,可以考虑将
tcpdump
nohup
screen
tmux
.pcap
理解网络层级: 记住
tcpdump
tcp
udp
结合其他工具: 有时候
tcpdump
.pcap
grep
awk
tcpdump
这些技巧都是在实际工作中摸索出来的,它们能帮助你在面对复杂的网络问题时,更高效、更精准地利用
tcpdump
以上就是Linux怎么使用tcpdump捕获指定协议流量的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号