Linux环境下有多种Sniffer工具,需根据场景选择:
安装方法(以Debian/Ubuntu为例):
# tcpdump(多数发行版默认安装)
sudo apt-get install tcpdump
# Wireshark(含tshark)
sudo apt-get install wireshark
# EtherApe
sudo apt-get install etherape
使用ip link或tcpdump -D查看可用网络接口(如eth0、ens33、wlan0),避免抓取无效接口(如回环接口lo)。
# 监听eth0接口,显示详细信息(-v),捕获10个包后退出(-c 10),不解析主机名(-n)
sudo tcpdump -i eth0 -n -v -c 10
# 保存捕获的包到文件(-w),后续用Wireshark分析
sudo tcpdump -i eth0 -w capture.pcap
过滤是Sniffer的核心功能,可减少无关数据干扰。常用过滤规则:
# 捕获与192.168.1.100相关的所有流量(双向)
sudo tcpdump -i eth0 host 192.168.1.100
# 捕获从192.168.1.100发出的流量(src:源)
sudo tcpdump -i eth0 src 192.168.1.100
# 捕获发送到192.168.1.100的流量(dst:目标)
sudo tcpdump -i eth0 dst 192.168.1.100
# 捕获80端口(HTTP)的流量(tcp/udp均可)
sudo tcpdump -i eth0 port 80
# 捕获HTTPS(443端口)的TCP流量
sudo tcpdump -i eth0 tcp port 443
# 捕获DNS(53端口)的UDP流量
sudo tcpdump -i eth0 udp port 53
# 捕获SSH(22端口)的流量
sudo tcpdump -i eth0 port 22
# 捕获192.168.1.100与192.168.1.200之间、端口80的TCP流量
sudo tcpdump -i eth0 tcp port 80 and src 192.168.1.100 and dst 192.168.1.200
# 排除ICMP流量(如ping)
sudo tcpdump -i eth0 not icmp
# 捕获大于1000字节的包(排除小包干扰)
sudo tcpdump -i eth0 greater 1000
# 捕获TCP SYN包(标志位SYN=1,ACK=0,表示连接请求)
sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) = 0'
# 读取保存的pcap文件
sudo tcpdump -r capture.pcap -nn
# 显示包的详细信息(包括时间戳、源/目标IP、端口、协议)
sudo tcpdump -r capture.pcap -vvv -nn
# 解析包内容(十六进制+ASCII,适合查看应用层数据)
sudo tcpdump -r capture.pcap -XX -nn
Wireshark提供更直观的界面,关键功能:
http.request、tcp.analysis.retransmission),快速定位特定流量;port 80,查看是否有来自客户端的SYN包(连接请求)及服务器的SYN-ACK响应(正常连接);若无SYN包,可能是客户端网络问题;若无SYN-ACK,可能是服务器未监听端口或防火墙拦截。icmp(ping包),查看客户端到服务器的ICMP请求是否有响应,判断路由是否可达。tcp.analysis.retransmission(Wireshark),查看是否有大量重传包(正常情况下重传包应极少);若有,可能是网络拥塞、链路故障或服务器负载过高。tcp.flags.syn == 1(TCP SYN包),查看tcp.time_delta(Wireshark),计算客户端到服务器的SYN包往返时间(RTT),若RTT过高(如超过100ms),可能存在网络延迟。http.request,查看请求方法(GET/POST)、URL及响应状态码(如200成功、404未找到、500服务器错误);若状态码为500,可能是服务器应用故障。udp.port == 53,查看DNS查询请求(Query)是否有对应的响应(Response);若无响应,可能是DNS服务器不可达或配置错误。tcpdump(资源占用低),桌面环境用Wireshark(分析便捷);