要“调试 Debian sniffer”,需要先明确你指的是哪一类 sniffer,因为不同工具的调试方式差别很大。下面我按最常见场景给你一个系统性的排查和调试指南。
常见情况包括:
如果你不确定,可以先告诉我:
cat /etc/debian_version)ip link show
如果看到:
PROMISC
说明网卡处于混杂模式(sniffer 常见)。
关闭混杂模式:
sudo ip link set eth0 promisc off
ps aux | grep -E 'tcpdump|wireshark|tshark|snort|suricata'
或:
ss -pl | grep pcap
sudo ss -a | grep packet
查看 BPF 程序(eBPF):
sudo bpftool prog list
sudo tcpdump -i eth0 -n -v
如果没抓到包:
sudo tcpdump -i any -n
Debian 默认 普通用户不能直接抓包。
✅ 解决方案:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump
或直接使用:
sudo tcpdump
ip link
如果接口是 DOWN:
sudo ip link set eth0 up
在代码中:
pcap_set_verbose(pcap, PCAP_VERBOSE_DEBUG);
或运行前:
export PCAP_DEBUG=1
| 问题 | 调试方法 |
|---|---|
| pcap_open_live 失败 | perror(“pcap_open_live”) |
| 抓不到包 | 用 tcpdump 对比 |
| 权限不足 | 用 strace 看 |
| 接口名错误 | pcap_findalldevs() |
sudo strace -e trace=network,open,ioctl ./your_sniffer
sudo snort -c /etc/snort/snort.conf --dump-dynamic-rules /tmp
测试配置:
sudo snort -T -c /etc/snort/snort.conf
sudo suricata -T -c /etc/suricata/suricata.yaml
检查内核日志:
dmesg | tail -50
查看 eBPF 程序:
sudo bpftool prog list
sudo bpftool net list
⚠️ 安全排查:
sudo netstat -antlp
sudo ss -antlp
sudo lsof | grep pcap
检查:
lsmod | grep -E 'packet|af_packet'
你可以直接补充以下信息之一:
我可以一步一步帮你定位到具体哪一行 / 哪个系统调用出问题。