2017-01-08 1 views
1

나는 C에 OS X를위한 간단한 스니퍼를 쓰고있다 그래서, 나는 문제가있다, 나는 네트워크 인터페이스의 색인을 얻을 수 없다. 식별자 'SIOCGIFINDEX'는 미표시이고네트워크 인터페이스의 색인을 얻으십시오

int sockfd=socket(PF_INET, SOCK_DGRAM, 0); 
    if(sockfd<0) 
    { 
    printf("create socket"); 
    fprintf(stderr, "%s\n",strerror(errno)); 
    exit(EXIT_FAILURE); 
    } 
    sprintf(ifreq.ifr_name, "%s", "en0"); 
    if(ioctl(sockfd, SIOCGIFINDEX, &ifreq)<0) 
    { 
    fprintf(stderr, "%s\n",strerror(errno)); 
    exit(EXIT_FAILURE); 
    } 

문제점 : 는이 코드를 사용한다. 네트워크 인터페이스 인덱스가 구조적 sockaddr_ll에 대한 이해가 올바르게 이해된다면

+0

'#include '을 (를) 프로그램에 포함 시켰습니까? – hmofrad

+0

예,이 헤더를 포함했습니다 – Anton

답변

0

코드 상단에 #include <sys/ioctl.h>을 추가하면 문제가 해결됩니다!

+0

죄송합니다. 포함 된 헤더를 쓰는 것을 잊어 버렸습니다. #include 파일 'sockio.h'에 'SIOCGIFINDEX'식별자가 없습니다. – Anton

+0

'sockio.h'를 작성했다고 가정하고 보유하고있는 날씨를 확인하십시오. '','','','',''및''라이브러리를 모두 가져 왔습니다. 나를 위해,''이라고 말하면 오류가 재생산됩니다. 또한 원하는 경우 코드를 대답에 넣을 수 있지만 구현과 조금 다릅니다. #INCLUDE 사용법 #include 사용법 #include 사용법 #include 사용법 #include 사용법 #include 사용법 #include 사용법 #include <: – hmofrad

+0

나는 다음 헤더를 포함 netinet/in.h> 사용법 #include 사용법 #include 사용법 #include 사용법 #include 사용법 #include Anton

0

이 코드를 시도해 볼 수도 있습니다. 그러면 이름이 인 인터페이스가 생겨서 무엇인가를 할 것입니다. 헤더를 포함시키고 메모리가 필요하면 ifap으로 끝내야합니다.

#include <ifaddrs.h> 
void do_smth_with_interface(const char *name) 
{ 
    if (!name) { 
     printf("Not a valid name, NULL ptr\n"); 
     return; 
    } 

    struct ifaddrs *ifap = NULL; 

    if(getifaddrs(&ifap) < 0) { 
     printf("Cannot not get a list of interfaces\n"); 
     return; 
    } 

    for(struct ifaddrs *p = ifap; p!=NULL; p=p->ifa_next) { 
     if (strcmp(p->ifa_name, name) == 0) 
       // do smth with the interface. 
    } 

    freeifaddrs(ifap); 
} 
관련 문제