Bonjour,
Je souhaite utiliser WinPcap pour envoyer et recevoir des trames Ethernet depuis une un ordinateur sous Windows (je code avec Eclipse CDT).
Mais lorsque j’essaye de compiler l'exemple de base de la librairie qui affiche une liste des interfaces disponibles sur la machine, j’obtiens les erreurs suivante :
"Function 'pcap_findalldevs_ex' could not be resolved"
"Symbol 'PCAP_SRC_IF_STRING' could not be resolved"
Voici le code de l'exemple (légèrement modifier pour afficher "Hello world"):
J'ai ajouter à la liste des symboles prédéfinis "HAVE_REMOTE" et "WPCAP", ajouter à la liste des librairies "wpcap" et "ws2_32" et ajouter à la liste des dossiers dans lesquels chercher les librairies le dossier Lib dans le dossier d'installation du develloper pack 4.1.2 de WinPcap. Comme cela est suggérer dans le tutoriel suivant : http://www.winpcap.org/docs/docs_412/html/group__wpcapsamps.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 #include <iostream> #include <stdio.h> #include <pcap.h> using namespace std; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! pcap_if_t *alldevs; pcap_if_t *d; int i=0; char errbuf[PCAP_ERRBUF_SIZE]; /* Retrieve the device list from the local machine */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); exit(1); } /* Print the list */ for(d= alldevs; d != NULL; d= d->next) { printf("%d. %s", ++i, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } if (i == 0) { printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return -1; } /* We don't need any more the device list. Free it */ pcap_freealldevs(alldevs); return 0; }
J'ai remarquer que je pouvais néanmoins utiliser la fonction pcap_findalldevs et j'ai également le même problème avec la fonction pcap_open qui est indisponible alors que les fonction qu'elle regroupe (pcap_open_live, pcap_open_dead et pcap_open_offline) semble disponibles, je suppose donc que je n'ai simplement pas accés au fonction spécifique à Windows.
J'aimerai tout de même comprendre l’erreur qu j'ai fait, d'autant plus que je ne suis pas sur de pouvoir me passer de ces fonctions, même si cela ne semble pas bloquant aujourd'hui.
Contexte d'utilisation :
Le but est de porter un protocole de communication "maison" entre un système embarqué et un ordinateur, qui fonction actuellement sur un liens série, vers un liens Ethernet.
Nous ne souhaitons pas implémenter (ou utiliser) la couche IP car il est prévu de connecter directement l'ordinateur à un système embarqué ou a plusieurs systèmes embarqué via un switch et à termes le code devra être certifié au normes aéronautiques donc cela induirai un cout trop important.
Il m'a semblé au travers des forum que j'ai parcouru que la meilleur solution pour envoyer et recevoir des trames Ethernet est d'utiliser WinPcap, néanmoins si je fait fausse route n'hésiter pas à me le signaler.
Je vous remercie d'avance pour toute l'aide que vous pourrez m'apporter.
Cordialement
Arthur
Partager