Hi,
mal ein zwei Anmerkungen:
Erstmal ist der Fehlerpuffer echt mal individuell gewählt. Man sollte hier keinen festen String übergeben, sondern die Adresse eines Speicherbereichs, der einfach groß genug für einen möglichen Fehler ist. Die für C/C++ übliche Form (die auch hier Anwendung findet) ist das deklarieren eines Char-Arrays, dessen Länge durch eine Konstante (max. Fehlerlänge) festgelegt wird.
An sich ist die Funktion pcap_open_live auch mit einem Rückgabewert versehen, diesen solltest Du auch auswerten. Die Doku sagt, dass ein null hier für den Fehlerfall steht und selbst ein erfolgreicher Abschluss kann eine Fehlermeldung mit sich bringen (dies sollte man also ggf. auch prüfen).
Vielleicht solltet ihr auch erstmal schauen, ob überhaupt eth0 für das Capturing in Frage kommt. Versucht mal erstmal alle möglichen Karten auszugeben, müsste ungefährt (ungetestet) so aussehen:
Code:
#include <iostream>
#include <cstdio>
#include <pcap.h>
#include <fstream>
using namespace std;
int main(int argc, char* argv[]) {
char errbuf[PCAP_ERRBUF_SIZE];
pcap_if_t **devs;
if (pcap_findalldevs(devs, errbuf) != 0) {
cout << "Fehler: \n" << errbuf << "\n";
}
else {
pcap_if_t *dev = devs[0];
cout << "Gefundene Devices: \n";
while ((*dev) != 0) {
cout << dev->name;
dev = dev->next;
}
}
}
Wie gesagt, ungetestet (mache zu selten was mit C, kann also sein dass die eine oder andere Indirektion hier falsch ist). Da solltest Du jedenfalls erstmal schauen, ob es überhaupt ein eth0 Device gibt, sonst ist das Device nicht für die Bibliothek geeignet.
Gruß Der Unwissende
PS: Herzlich Willkommen in der
DP