pcap_lookupnet возвращает неверный IP-адрес - PullRequest
1 голос
/ 09 февраля 2012

Следующий пример кода из документации libpcap приводит к следующему коду, который должен сообщать IP-адрес данного интерфейса (в данном случае eth0) [Для краткости проверка опущена]

#include <stdio.h>
#include <pcap.h>
#include <arpa/inet.h>

int main(int argc, char *argv[])
{
  char errbuf[PCAP_ERRBUF_SIZE]; 
  bpf_u_int32 mask;   
  bpf_u_int32 ip;    
  struct in_addr ip_addr;

  /* Find the properties for the device */
  pcap_lookupnet("eth0", &ip, &mask, errbuf);

  ip_addr.s_addr = ip;

  printf("IP Address: %s\n", inet_ntoa(ip_addr));

  return 0;
}

Однако это приводит кв 192.168.1.0, а не в правильном 192.168.1.100.Запуск этого на другом компьютере в другой подсети дает 10.0.0.0, а не правильный 10.0.0.107, что приводит меня к убеждению, что libpcap неправильно копирует последний октет.Я вручную преобразовал целое число, возвращаемое pcap_lookupnet, чтобы убедиться, что это не проблема с использованием inet_ntoa (я также пробовал inet_ntop, с идентичными результатами).После кода из этого вопроса: Получить IP-адрес интерфейса в Linux сообщает правильный IP-адрес.Это ошибка в libpcap или я что-то не так делаю?

1 Ответ

1 голос
/ 09 февраля 2012

Ваше утверждение "который должен сообщать IP-адрес данного интерфейса" неверно.

С справочной страницы:

pcap_lookupnet () используется для определения номера сети IPv4 и маскировать связано с устройством сетевого устройства. Оба netp и maskp являются bpf_u_int32 указателей.

Вы уверены, что у вас есть номер сети 10.0.0.107 или 192.168.1.100 соответственно? Звучит довольно необычно.

...