Naja ich will das IP und TCP Paket für einen bestimmten Port von meiner Internetleitung aufzeichnen.
Erster Test Netzwerk-zu-Netzwerk
char filter[] = "port 5432";
pcap_open_live( "eth0", 40, 0, 50, errbuf );
..
pcap_compile( descr, &fp, filter, 0, net );
pcap_setfilter( desc, &fp );
...
while( true )
{
packet = pcap_next(descr, &hdr);
// ethernet paket ...
eptr = (ether_header*) packet;
... ip-paket
... tcp-paket
}Hier schonmal eine Frage. Warum kann ich das nicht einfach eth1 benutzten, was mit dem Internet direk angeschlossen ist? Mein Test ergab keine Ergebnisse, es werden keine Pakete aufgezeichnet. (PS: Mit eth0 funtioniert soweit alles perfekt (netzwerk)).
Nun soll aber ppp0 getrackt werden, bei ppp0 werden zwar pakete aufgezeichnet nur ist hier nicht klar was für eine Art Paket ich erhalte - Ein Ethernet scheint hier wohl nicht vorzuliegen.
Ein Blick hierauf. PPP_over_Ethernet
Okay schaut man sich das PPPoE Protokoll, liegt die PPPoE schicht über der ethernet schicht, klingt soweit logisch.
Laut Doku:
# On interface 'ppp0', libpcap will strip the PPP header, and give us the IP packet.
Soweit so gut. Also hol ich mir kein ethernet pointer sondern direkt ein IP-Header Pointer. Nur hier erhalte ich auch keine ordentlichen Ergebnisse.
char filter[] = "port 5432";
pcap_open_live( "eth0", 40, 0, 50, errbuf );
..
pcap_compile( descr, &fp, filter, 0, net );
pcap_setfilter( desc, &fp );
...
while( true )
{
packet = pcap_next(descr, &hdr);
// ethernet paket ...
//eptr = (ether_header*) packet;
... ip-paket
sniff_ip *ip = (sniff_ip*) (packet);
u_char *dest_ip = (u_char*)&ip->ip_dest.s_addr;
u_char *src_ip = (u_char*)&ip->ip_src.s_addr;
//hier kommen aber falsch IP Adressen raus.
... tcp-paket
}Noch mehr informationen?