您好我从WinPcap驱动程序获取网卡地址信息时遇到了一些问题。我注意到,只要为特定NIC启用了IPv6,它的地址信息就会变为0.0.0.0。我该如何解决这个问题?
pcap_addr* address = GetDeviceAddress(1);
cout<<"IP address "<<iptos(((struct sockaddr_in *)address->addr)->sin_addr.s_addr)<<endl;
/////////////
pcap_addr* GetDeviceAddress(int index)//Gets the name of a device using the zero based index of its location in the list
{
int i=0;
if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&AllDevices,errbuf) != -1)
for(Iterator=AllDevices;Iterator!=NULL;Iterator=Iterator->next)
{
if(i==index)
{
return Iterator->addresses;
}
i++;
}
return NULL;
}
答案 0 :(得分:1)
您查看地址信息的代码是什么样的?也许它有一个错误导致它无法正确处理IPv6地址。
地址信息可能包含多个 IP地址 - libpcap / WinPcap的pcap_findalldevs()
调用和WinPcap的pcap_findalldevs_ex()
调用提供指向pcap_if_t
列表的指针结构,它找到的每个接口都有一个,每个结构都包含struct pcap_addr
类型的地址信息项的列表。这些地址信息项中的每一个都包括网络地址,其类型为struct sockaddr
;该结构包含一个名为sa_family
的成员,其IPv4值为AF_INET
,IPv6为AF_INET6
。如果成员的值为AF_INET6
,则地址数据将为128位IPv6地址, NOT 32位IPv4地址。