Следующий пример кода из документации 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 или я что-то не так делаю?