Windows下Clion配置WinPcap开发环境
《网络协议分析》课程实验需要使用WinPcap进行开发,但教材上展示的是VC++6.0开发环境的配置,VC++6.0这个开发工具用起来究竟如何,懂的都懂🤡。。。于是我选择了在自己最喜欢的Jetbrains家族里的CLion进行开发,话不多说,开整😎😎!!

-
先从网上下载winpcap开发包官方网站链接
-
在项目内的CMakeLists.txt文件中参考如下格式进行配置
cmake_minimum_required(VERSION 3.22)
project(network_analyse_1 C) # 填写项目名称
set(CMAKE_C_STANDARD 99)
set(INC_DIR D:/WpdPack/Include) # 填写include目录路径
set(LINK_DIR D:/WpdPack/Lib/x64) # 根据系统环境选择lib,64位系统选择到x64目录
include_directories(${INC_DIR})
link_directories(${LINK_DIR})
link_libraries(Packet wpcap)
add_executable(network_analyse_1 main.c)
target_link_libraries(network_analyse_1 Packet wpcap) # 第一个参数填写为项目名称
- 下面附上一段测试代码,这段代码实现的主要功能是显示本机网卡设备列表以及展示抓取网络协议包的大小
#define HAVE_REMOTE
#define WPCAP
#include <stdio.h>
#include <pcap.h>
void packet_handler(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data) {
time_t time = pkt_header->ts.tv_sec;
struct tm *ltime = localtime(&time);
char timestr[16];
(VOID) user;
(VOID) pkt_data;
strftime(timestr, sizeof timestr, "%H:%M:%S", ltime);
printf("%s. tv_usec: %d, caplen: %d, len: %d\n", timestr, pkt_header->ts.tv_usec, pkt_header->caplen, pkt_header->len);
}
int main() {
printf("Available network device:\n");
pcap_if_t *alldevs;
pcap_if_t *d, *target_device;
pcap_t *cap_ins_des;
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 (i == 5) {
target_device = d;
}
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");
}
/* open this interface */
cap_ins_des = pcap_open(target_device->name /* char *source */, 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf);
if (cap_ins_des == NULL) {
printf("%s\n", errbuf);
exit(-1);
}
/* start the capture, deal with one packet each loop */
pcap_loop(cap_ins_des, 30 /* capture 30 packets */, packet_handler, NULL);
pcap_freealldevs(alldevs);
}
- 运行效果截图如下:
- 最后再瞧瞧,CLion这高亮配色和界面布局看着就心情舒畅愉快,去写代码咯