2012-02-25 4 views
3

libpcap을 사용하여 리눅스에서 인터페이스의 IP 주소를 얻는 방법이 있습니까? Get IP address of an interface on Linuxpcap을 사용하여 리눅스에서 인터페이스의 ip 주소 받기

을하지만 PCAP를 사용하지 마십시오

나는이를 발견했다. PCAP 예에서 또한

this 같은 당신의 IP를 얻을 것을 말한다 그러나 그것은 당신에게 당신의 네트워크 주소를 제공

PCAP 솔루션을 가지고 좋은 것입니다,하지만 존재하지 않는 경우, 내가 사용 첫 번째 링크의 코드

감사 pcap_findalldevs 기능을 사용

+2

나는 그것을하지 않습니다. 왜 pcap로하고 싶습니까? –

+0

내가 궁금해서 (또한 다른 사람들도) <우리의 IP 주소>라고 쓰여진 예를 보았습니다. 실제로 그 사람들에게 네트워크 주소를 알려주었습니다. (나 같은) 그것으로부터 배우면 혼란 스러울 것이다. 그러나 첫 번째 링크의 코드를 사용해도 상관 없습니다. 내가 말했듯이 내 솔루션뿐만 아니라 다른 사람들을위한 솔루션을 제공하는 것이 좋을 것입니다. – Jan

답변

9

: sudo ./pcap

#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; 
} 

출력 :

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