什么是deprecated警告?libpcap调用pcap_lookupdev出现gcc编译告警怎么解决
问题解答
1. deprecated警告的含义
deprecated翻译为弃用,该类警告是编译器告知你:当前调用的pcap_lookupdev已经被libpcap开发团队标记为淘汰候选接口:
- 现阶段该接口仍然可以正常编译、运行,不会影响你当前代码的功能
- 但官方已经停止对该接口的维护,后续版本的libpcap极有可能直接移除该接口,如果你继续使用,未来你的代码将无法兼容新版本的libpcap库
- 警告里已经给出官方推荐的替代方案:改用
pcap_findalldevs接口,取返回的第一个设备即可
2. 代码修改方案
你只需要将原有获取嗅探网卡的逻辑替换为pcap_findalldevs的实现即可,修改后的完整代码参考:
#include <pcap.h> #include <stdlib.h> #include <stdio.h> #include "YYY.h" void pcap_fatal(const char *failed_in, const char *errbuf){ printf("Fatal Error in %s: %s\n", failed_in, errbuf); exit(1); } int main(){ struct pcap_pkthdr header; const u_char *packet; char errbuf[PCAP_ERRBUF_SIZE]; char *device; pcap_t *pcap_handle; pcap_if_t *alldevs; // 新增设备列表指针 int i; // 替换原有pcap_lookupdev逻辑 if (pcap_findalldevs(&alldevs, errbuf) == -1) pcap_fatal("pcap_findalldevs", errbuf); device = alldevs->name; printf("Sniffing of device %s\n", device); pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf); for(i=0;i<3;i++){ packet = pcap_next(pcap_handle, &header); printf("Got a %d byte packet\n", header.len); dump(packet, header.len); } pcap_close(pcap_handle); pcap_freealldevs(alldevs); // 释放设备列表内存,避免泄漏 return 0; }
修改后重新编译即可消除该警告。
内容的提问来源于stack exchange,提问作者user14622805
相关产品推荐
相关产品推荐

