6

Estoy probando un ejemplo de obtención de información avanzada sobre dispositivos n/w instalados desde WinPcap.pcap_findalldevs_ex la función no está definida

Incluso me han seguido las instrucciones para la inclusión de WinPcap biblioteca, siendo el compilador se queja de que no está definida pcap_findalldevs_ex

en la línea if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1).

Mi Código:

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

me puede apuntar en la dirección correcta a alguien?

Editar: Si uso pcap_findalldevs(&alldevs, errbuf) en el código anterior, se compila correctamente. Así que supongo que no tiene problemas para enlazar con el dll.

Editar 1: Error

error C3861: 'pcap_findalldevs_ex': identificador no encontrado
IntelliSense: identificador "pcap_findalldevs_ex" es indefinido

Gracias.

+0

La misma respuesta que funcionó para mí, Además, tuve que hacer referencia a las bibliotecas de 32 bits en lugar de x64 one (WpdPack \ Lib \ x64) aunque mi sistema operativo de 64 bits –

Respuesta

9

pcap_findalldevs_ex sólo está presente si se define HAVE_REMOTE

Añadir HAVE_REMOTE como una definición de preprocesador en las propiedades del proyecto, o haga lo siguiente para cada incluyen de pcap.h:

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

@Erik me sigue dando el mismo error 'pcap_findalldevs_ex ': identifier not found'. ¿Debo publicar las capturas de pantalla de cómo he agregado la biblioteca de WinPcap en mi proyecto? Y el problema principal es que si construyo un ejemplo de ejemplo que contenga la función 'pcap_findalldevs' se construye con éxito, pero no se compila con los programas' pcap_findalldevs_ex'. – Searock

+0

@Searock Ruzario: ver la respuesta actualizada – Erik

+0

@Erik Creo que hay un problema con una función porque si elimino 'pcap_findalldevs_ex (source, NULL, & alldevs, errbuf)' y lo reemplazo por 'pcap_findalldevs (& alldevs, errbuf)' se compila con éxito . Pero luego no funcionará como se requiere. – Searock

Cuestiones relacionadas