获取WinPcap地址信息时出错

时间:2012-08-20 17:18:19

标签: c++ winpcap

您好我从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;
    }

1 个答案:

答案 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地址。