2012-02-25 142 views
3

有没有办法如何获得Linux中使用libpcap的接口的IP地址?使用pcap获取linux中的接口的ip地址

我发现这一点: Get IP address of an interface on Linux

,但不使用PCAP。

在PCAP例子

也说,像this应该得到你的IP,但它给你的网络地址

这将是很好有一个PCAP解决方案,但如果没有,我会用来自第一个链接的代码。

感谢

+2

我不明白这一点。你为什么想用pcap来做? – 2012-02-25 10:47:21

+0

,因为我很好奇,我也看过那个例子(和其他人)写在<我们的IP地址>的地方,它实际上给了他们他们的网络地址,这可能不是他们想要的,然后有人会读它并从中学习(像我一样)会感到困惑。 但我不介意使用第一个链接的代码。正如我所说,拥有这样的解决方案会很好,不仅适用于我,也适用于其他正在学习pcap的人。 – Jan 2012-02-25 10:57:52

回答

9

使用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 
+0

谢谢。我遇到了一个编译器问题,我解决了这个问题:http://stackoverflow.com/questions/24881/how-do-i-fix-for-loop-initial-declaration-used-outside-c99-mode-gcc -错误 – tremendows 2013-07-11 16:15:24