在Linux中使用pcap获取接口的IP地址

3

有没有一种方法可以使用libpcap在Linux中获取接口的IP地址?

我找到了这个获取Linux上接口的IP地址,但那不使用pcap。

此外,在pcap示例中,它说类似于this的东西应该可以获取您的IP,但它会给您您的网络地址。


2
我不明白,为什么你想用pcap来做这件事? - Karoly Horvath
因为我很好奇,而且我看到了那个例子(和其他例子),其中写着<我们的IP地址>,实际上它给出了他们的网络地址,这可能不是他们想要的,然后会有人阅读并从中学习(像我一样)会感到困惑。然而,我不介意使用第一个链接中的代码。正如我所说,拥有这样的解决方案不仅对我自己有好处,也对其他正在学习pcap的人有好处。 - Jan
1个回答

11
使用 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

谢谢。我遇到了编译器的问题,我是这样解决的:https://dev59.com/vHVD5IYBdhLWcg3wTJvF - tremendows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接