6

WinPcap에서 설치된 n/w 장치에 대한 고급 정보를 얻는 예제를 시험 중입니다. pcap_findalldevs_ex 함수가 정의되지 않았습니다.

나는 심지어 WinPcap 라이브러리를 포함에 대한 지침을 따랐다 여전히 컴파일러는 pcap_findalldevs_ex 라인 if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1)에서

를 정의되어 있지 않습니다 불평.

내 코드 :

#include "stdafx.h" 
#include <stdio.h> 
#include "pcap.h" 
#include <winsock2.h> 
#pragma comment(lib, "ws2_32") 

// Function prototypes 
void ifprint(pcap_if_t *d); 
char *iptos(u_long in); 
char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen); 



int _tmain(int argc, _TCHAR* argv[]) 
{ 
    pcap_if_t *alldevs; 
    pcap_if_t *d; 
    char errbuf[PCAP_ERRBUF_SIZE+1]; 
    char source[PCAP_ERRBUF_SIZE+1]; 

    printf("Enter the device you want to list:\n" 
     "rpcap://    ==> lists interfaces in the local machine\n" 
     "rpcap://hostname:port ==> lists interfaces in a remote machine\n" 
     "       (rpcapd daemon must be up and running\n" 
     "       and it must accept 'null' authentication)\n" 
     "file://foldername  ==> lists all pcap files in the give folder\n\n" 
     "Enter your choice: "); 

    fgets(source, PCAP_ERRBUF_SIZE, stdin); 
    source[PCAP_ERRBUF_SIZE] = '\0'; 

    /* Retrieve the interfaces list */ 
    if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1) 
    { 
     fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf); 
     exit(1); 
    } 

    /* Scan the list printing every entry */ 
    for(d=alldevs;d;d=d->next) 
    { 
     ifprint(d); 
    } 

    pcap_freealldevs(alldevs); 

    return 1; 

    return 0; 
} 

/* Print all the available information on the given interface */ 
void ifprint(pcap_if_t *d) 
{ 
    //Code removed to reduce length and it contains no errors. 
} 



/* From tcptraceroute, convert a numeric IP address to a string */ 
#define IPTOSBUFFERS 12 
char *iptos(u_long in) 
{ 
    //Code removed to reduce length 
} 

char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen) 
{ 
     //Code removed to reduce length 
} 

은 어떤 사람이 날이 올바른 방향으로 포인트?

편집 : 위의 코드에서 pcap_findalldevs(&alldevs, errbuf)을 사용하면 성공적으로 빌드됩니다. 그래서 그것은 DLL에 연결하는 데 아무런 문제가 없다고 생각합니다.

편집 1 : 오류

오류 C3861 : 'pcap_findalldevs_ex'
인텔리 발견되지 식별자 : 식별자 "pcap_findalldevs_ex는"

감사 정의되지 않습니다. 당신이 모든에 대해 다음 HAVE_REMOTE

프로젝트 속성에서 전 처리기 정의로 HAVE_REMOTE를 추가하거나 할 정의하면

+0

같은 대답은 나를 위해 일한, 게다가 64 비트 OS 인 x64 (WpdPack \ Lib \ x64) 대신 32 비트 라이브러리를 참조해야만했습니다. –

답변

9

pcap_findalldevs_ex 만 존재는 pcap.h의 포함 :

#define HAVE_REMOTE 
#include "pcap.h" 
+0

@Erik 여전히'pcap_findalldevs_ex ': identifier not found 오류가 있습니다. 프로젝트에 WinPcap 라이브러리를 어떻게 추가했는지 스크린 샷을 게시해야합니까? 그리고 주된 문제는'pcap_findalldevs' 함수를 포함하는 샘플 예제를 빌드하면 성공적으로 빌드되지만'pcap_findalldevs_ex' 프로그램으로 빌드되지 않는다는 것입니다. – Searock

+0

@Searock Ruzario : 업데이트 된 대답보기 – Erik

+0

@Erik'pcap_findalldevs_ex (source, NULL, & alldevs, errbuf)'를 제거하고'pcap_findalldevs (& alldevs, errbuf)'로 바꾸면 함수에 문제가 있다고 생각합니다. . 그러나 필요에 따라 작동하지 않습니다. – Searock