9,506
社区成员
发帖
与我相关
我的任务
分享
pcap_if_t *alldevs;
pcap_if_t *seldev;
pcap_t *fp;
char errbuf[PCAP_ERRBUF_SIZE];
srand(time(0));
/* 获取本机设备列表 */
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}
// 找到一个有ip的就当有连网的网卡了
for (seldev = alldevs; seldev != NULL; seldev = seldev->next)
{
pcap_addr* pcapaddr = NULL;
for (pcapaddr= seldev->addresses; pcapaddr != NULL; pcapaddr = pcapaddr->next)
{
if (pcapaddr->addr->sa_data[2] != '\0' && pcapaddr->addr->sa_data[3] != '\0')
{
break;
}
}
if (pcapaddr != NULL)
{
break;
}
}
if (seldev == NULL)
{
fprintf(stderr, "Can not find network!\n");
exit(1);
}
/* 打开这个输出设备 */
if ( (fp= pcap_open(seldev->name, // 设备名
100, // 要捕获的部分 (只捕获前100个字节)
PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式
1000, // 读超时时间
NULL, // 远程机器验证
errbuf // 错误缓冲
) ) == NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", alldevs->name);
return -1;
}