c++ - 获取 WinPcap 地址信息时出错

标签 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;
    }

最佳答案

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

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

关于c++ - 获取 WinPcap 地址信息时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12042091/

相关文章:

c++ - winpcap抓包的单位是什么,二层帧还是三层包?

c++ - 保存命令行参数并对其进行类型转换

c++ - 将 unordered_map 与 Catch2 谓词一起使用时类型不匹配

c++ - pcap_lookupdev 总是返回 NULL

networking - 捕获 Windows XP 本地主机 TCP 流量

python - 如何存储抓包数据(*.pcap)以供分析

c++ - 无法在 vs2012 中构建任何 c++ 项目。错误 LNK1327 : rc. exe

c++ - 为什么 OpenCL cl.hpp(仅 header )包装器不违反单一定义规则?

java - 在 C++ 或 Java 中以响应模式使用 cmd

c++ - 无法在 QT Creator 中打开包含文件 pcap.h (C1083)