过去一直都是用Java的,结果突然要做raw socket编程,Java干不了这活,只好临时抱佛脚捡起C++。于是下载了CLion,发现winpcap的环境配不上,研究好久终于成功,下面说细节。
1.下载winpcap开发包即WpdPack。WinPcap · Developer Resourceshttps://www.winpcap.org/devel.htm
2.打开项目里的CMakeLists.txt,增加以下行:
set(INC_DIR 你的WpdPack路径/Include)
set(LINK_DIR 你的WpdPack路径/Lib)
include_directories(${INC_DIR})
link_directories(${LINK_DIR})
link_libraries(Packet wpcap)
add_executable(这行是原本就有的)
target_link_libraries(你的项目名,从上一行抄 Packet wpcap)
3.如果出现了skipping incompatible,说明你的系统是64位的,而库是32位的所以人家不认。把LINK_DIR改成Lib路径下的x64文件夹就解决了。
4.附运行demo
#define HAVE_REMOTE
#define WPCAP
#include <iostream>
#include <pcap.h>
int main() {
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];
/* 获取本地机器设备列表 */
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) {
fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
exit(1);
}
/* 打印列表 */
for(d=alldevs; d!=NULL; d=d->next) {
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
else
printf(" (No description available)\n");
}
if (i == 0) {
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return 0;
}
pcap_freealldevs(alldevs);
}