Грешка при получаване на информация за адреса на WinPcap

Здравейте, имам някакъв проблем с получаването на информация за адреса на мрежовата карта от драйвера WinPcap. Забелязах, че всеки път, когато IPv6 е активиран за конкретен NIC, адресната информация за него става 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;
    }

person yohannist    schedule 20.08.2012    source източник


Отговори (1)


Как изглежда вашият код, който разглежда адресната информация? Може би има грешка, която го кара да не обработва правилно IPv6 адресите.

Информацията за адреса може да има повече от един IP адрес - извикването pcap_findalldevs() на libpcap/WinPcap и pcap_findalldevs_ex() извикването на WinPcap доставя указател към списък от pcap_if_t структури, по един за всеки интерфейс, който е намерил, и всяка от тези структури включва списък с адресни информационни елементи от тип struct pcap_addr. Всеки от тези елементи с адресна информация включва мрежов адрес, който е от тип struct sockaddr; тази структура включва член с име sa_family, който ще има стойност AF_INET за IPv4 и AF_INET6 за IPv6. Ако членът има стойност AF_INET6, адресните данни ще бъдат 128 бита IPv6 адрес, НЕ 32 бита IPv4 адрес.

person Community    schedule 20.08.2012