2012-02-09 3 views
1

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

#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 с одинаковыми результатами). После кода с этого вопроса: Get IP address of an interface on Linux сообщает правильный IP-адрес. Это ошибка в libpcap или я делаю что-то неправильно?

ответ

1

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

Из страницы руководства:

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

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

+0

Итак, я неверно истолковал «номер сети», чтобы строго обозначить сетевую часть адреса хоста, а не IP-адрес? Если это так, пример кода (а также несколько книг по программированию pcap) очень вводят в заблуждение такими строками, как: 'bpf_u_int32 net; \t \t/* Наш IP */' –

+2

Определенно вводящий в заблуждение и плохо информированный. Учитывая сетевую маску 'm' и ip-адрес' i', номер сети 'n' задается' n = i & m'. – mvds

+0

В любом случае, вы могли бы объяснить это дальше? Я борюсь с той же проблемой. – Jim

Смежные вопросы