Ben*_*acs 2 c++ networking winpcap pcap libpcap
我正在使用pcap_findalldevs获取计算机中的设备列表.我成功了,设备的名称和描述,但我不知道为什么,我得到Netmask 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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
这是你应该做的:
/* 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*/
for (dev_addr = dev->addresses; dev_addr != NULL; dev_addr = dev_addr->next) {
if (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));
goto found;
}
}
}
found:
Run Code Online (Sandbox Code Playgroud)
这样,您可以检查整个地址列表,而不仅仅是列表中的第一个地址.如果,当您到达时found,dev非空,则指向具有至少一个IPv4地址的设备,并dev_addr指向该地址.如果dev为null,则表示没有具有IPv4地址的设备.
| 归档时间: |
|
| 查看次数: |
3288 次 |
| 最近记录: |