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構造体のリストには、見つかったインターフェイスごとに 1 つがあり、これらの構造体のそれぞれには、 type のアドレス情報項目のリストstruct pcap_addrが含まれています。これらの各アドレス情報項目には、タイプのネットワーク アドレスが含まれていますstruct sockaddr。その構造には、IPv4 とIPv6sa_familyの値を持つという名前のメンバーが含まれています。メンバーの値が の場合、アドレス データは32 ビットの IPv4 アドレスでなく、128 ビットの IPv6 アドレスになります。AF_INETAF_INET6AF_INET6

于 2012-08-20T21:07:06.790 に答える