0

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

1 回答 1

1

查看地址信息的代码是什么样的?也许它有一个错误,导致它无法正确处理 IPv6 地址。

地址信息可能有多个IP 地址——libpcap/WinPcap 的pcap_findalldevs()调用和 WinPcap 的pcap_findalldevs_ex()调用提供一个指向pcap_if_t结构列表的指针,它对应于它找到的每个接口,每个结构都包含一个类型为 的地址信息项的列表struct pcap_addr。这些地址信息项中的每一个都包括一个网络地址,其类型为struct sockaddr; 该结构包括一个名为 的成员sa_family,该成员将具有AF_INETIPv4 和AF_INET6IPv6 的值。如果成员具有值AF_INET6,则地址数据将是 128 位的 IPv6 地址,而不是32 位的 IPv4 地址。

于 2012-08-20T21:07:06.790 回答