Linux 下使用 Sniffer 进行数据包捕获与分析
一 工具选择与准备
- 常用工具
- tcpdump:Linux 上最常用、轻量的命令行抓包与过滤工具,适合服务器与快速排障。
- Wireshark:图形化协议分析器,适合深度分析与可视化查看(可读取 pcap 文件)。
- 安装
- Debian/Ubuntu:sudo apt-get update && sudo apt-get install tcpdump
- CentOS/RHEL:sudo yum install tcpdump
- 基本检查
- 查看网卡:tcpdump -D
- 选择可用接口(如 eth0、ens33、wlan0)进行监听。
二 捕获数据包
- 监听指定接口
- 限制抓取数量
- 示例:sudo tcpdump -i eth0 -c 100(仅抓取 100 个包)
- 只抓取 ICMP(如 ping)
- 示例:sudo tcpdump -c 5 -nn -i br0 icmp
- 保存到文件便于后续分析
- 示例:sudo tcpdump -i br0 -c 100 -nn -w kali.pcap port 22
- 从文件读取
- 示例:tcpdump -nn -r kali.pcap
- 常用输出控制
- -n/-nn:不解析主机名/端口名;-v/-vv:更详细输出;-X/-A:十六进制/ASCII 显示负载。
三 过滤与分析
- 常用过滤表达式
- 按端口:sudo tcpdump -i eth0 port 80
- 按主机:sudo tcpdump -i eth0 host 192.168.1.10
- 按网段:sudo tcpdump -i eth0 net 192.168.123.0/24
- 按协议:sudo tcpdump -i eth0 icmp;sudo tcpdump -i eth0 arp
- 组合条件:sudo tcpdump -i eth0 ‘tcp and src host 192.168.1.100 and dst port 443’
- 显示更丰富信息
- 显示链路层头部:sudo tcpdump -i eth0 -e
- 避免截断:sudo tcpdump -i eth0 -s 0 或 -s 65535
- 读取与分析 pcap
- 命令行:tcpdump -nn -r capture.pcap
- 图形化:用 Wireshark 打开 capture.pcap 进行协议树与流分析。
四 实战示例
- 定位 ARP 异常(检测 ARP 欺骗/风暴)
- 抓取 ARP 流量:sudo tcpdump -i eth0 -nn arp
- 快速筛查异常回复:sudo tcpdump -i eth0 -nn arp | grep reply
- 若发现某 MAC 冒充网关,可结合 DHCP 租约文件(如 /var/lib/dhcp/dhcpd.leases)查找对应 IP/MAC 归属,进一步定位问题主机。
- 排查 SSH 暴力登录
- 抓取 22 端口失败握手:sudo tcpdump -i eth0 -nn -s0 ‘tcp dst port 22 and (tcp[13] & 4 != 0)’
- 统计来源 IP:sudo tcpdump -i eth0 -nn -s0 ‘tcp dst port 22 and (tcp[13] & 4 != 0)’ | awk ‘{print $3}’ | sort | uniq -c | sort -nr | head
- 抓取 HTTP 明文流量(端口 80)
- 示例:sudo tcpdump -i eth0 -nn -A -s0 ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)’
- 提示:HTTPS(端口 443)为加密流量,需导入密钥或改用服务器日志/其他手段分析。
五 合规与性能建议
- 合法合规
- 仅在获得明确授权的网络与主机上抓包,避免侵犯隐私或违反法律法规。
- 最小权限与最小抓包
- 以必要权限运行,使用精准的BPF 过滤表达式减少无关流量,降低系统/网络负载。
- 文件与性能
- 长时间抓包务必写入 pcap 文件并定期轮转;必要时控制抓包长度(如 -s 0 或适度长度)与包数(-c),避免磁盘与内存压力。
- 协同排障
- 结合 iftop、NetHogs 等工具观察带宽与进程占用,与抓包结果交叉验证。