Получить IP-адрес интерфейса в Linux, используя pcap - PullRequest
3 голосов
/ 25 февраля 2012

Есть ли способ получить IP-адрес интерфейса в Linux с помощью libpcap?

Я нашел это, Получить IP-адрес интерфейса в Linux , но это нене используйте pcap.

Кроме того, в примерах pcap говорится, что что-то вроде this должно получить ваш IP, но даст вам сетевой адрес.

1 Ответ

9 голосов
/ 25 февраля 2012

Использование функции pcap_findalldevs:

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

static char errbuf[PCAP_ERRBUF_SIZE];

int main() {
    pcap_if_t *alldevs;
    int status = pcap_findalldevs(&alldevs, errbuf);
    if(status != 0) {
        printf("%s\n", errbuf);
        return 1;
    }

    for(pcap_if_t *d=alldevs; d!=NULL; d=d->next) {
        printf("%s:", d->name);
        for(pcap_addr_t *a=d->addresses; a!=NULL; a=a->next) {
            if(a->addr->sa_family == AF_INET)
                printf(" %s", inet_ntoa(((struct sockaddr_in*)a->addr)->sin_addr));
        }
        printf("\n");
    }

    pcap_freealldevs(alldevs);
    return 0;
}

Выход sudo ./pcap:

eth0: 192.168.2.1
usbmon1:
usbmon2:
usbmon3:
usbmon4:
usbmon5:
any:
lo: 127.0.0.1
...