我正在实现数据包收集器,但我遭受数据包丢失的困扰。
我的二进制文件可以从某个特定 IP 区域获取大部分数据包。(例如 100.101.1.1、100.101.2.1)。但是对于某些特定的 IP 区域,我无法获得任何数据包。(例如 200.201.1.1、200.201.2.1)
那时,tcpdump 可以从任何 IP 区域获取数据包。
我的实现中的 pcap 代码片段如下:
struct bpf_program fp;
pcap_t *pcd;
char errbuf[PCAP_ERRBUF_SIZE];
bpf_u_int32 netp;
char port[16], dev[16];
......
pcd = pcap_open_live(dev, BUFSIZ, PROMISCUOUS, -1, errbuf);
pcap_compile(pcd, &fp, port, 0, netp);
pcap_setfilter(pcd, &fp);
while(1){
packet = pcap_next(pcd, &hdr);
}
对我有什么想法吗?