【发布时间】:2023-03-15 02:22:01
【问题描述】:
我正在使用 pcap_findalldevs 来获取计算机中的设备列表。我成功地得到了它,带有设备的名称和描述,但我不知道为什么,我得到了网络掩码 0.0.0.0 和 IP 地址也是 0.0.0.0。 这是我生成列表的代码:
/* get the devices list */
if (pcap_findalldevs(&devList, errbuf) == -1)
{
fprintf(stderr, "There is a problem with pcap_findalldevs: %s\n", errbuf);
return -1;
}
/* scan the list for a suitable device to capture from */
for (dev = devList; dev != NULL; dev = dev->next)
{
pcap_addr_t *dev_addr; //interface address that used by pcap_findalldevs()
/* check if the device captureble*/
if ((dev_addr = dev->addresses) != NULL && dev_addr->addr->sa_family == AF_INET && dev_addr->addr && dev_addr->netmask) {
printf("Found a device %s on address %s with netmask %s\n", dev->name, iptos(((struct sockaddr_in *)dev_addr->addr)->sin_addr.s_addr), iptos(((struct sockaddr_in *)dev_addr->netmask)->sin_addr.s_addr));
break;
}
}
【问题讨论】:
-
您没有遍历界面的所有地址 - winpcap 返回地址列表的方式是否可能有些奇怪。您应该枚举 dev->addresses 列表中列出的所有地址。
-
我在互联网上搜索,每个人都像我一样做..我不知道为什么它不起作用..
-
“我在互联网上搜索,每个人都像我一样做。”好吧,他们都做错了;也许他们很幸运,当他们的代码运行时,IPv4 地址恰好位于列表的开头,但是假设列表总是在列表开头有一个 IPv4 地址的代码代码不正确。
标签: c++ networking pcap libpcap winpcap