Ошибка получения информации об адресе WinPcap

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

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