staging.inyokaproject.org

libpcap für eth0 oder ppp0?

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

kf2

Anmeldungsdatum:
1. Oktober 2007

Beiträge: Zähle...

Hey Jungs. Und zwar hab ich ein libpcap filter geschrieben der auf port 5432 (postgresql) lauscht und alle packete von eth0 abfängt und verwaltet. Funktioniert erstmal wunderbar. Nur wenn ich jetzt die Pakete über ppp0 tracker möchte, funktioniert das ding nicht. Er scheint das paket nicht als ethernet paket zu erkennen.

per doku heisst es, ich erhalte direkt einen IP' Header, keinen ppp0 header. Bedeutet das, dass ich den Ethernet Header überspringen muss?

gruß kf

kf2

(Themenstarter)

Anmeldungsdatum:
1. Oktober 2007

Beiträge: Zähle...

ein kleiner Tipp oder evt. ein paar erfahrungen wären super 😉

harry123

Avatar von harry123

Anmeldungsdatum:
3. Mai 2006

Beiträge: 3188

Ein paar Background - Infos wären schon mal sehr hilfreich. 😈

Greez

kf2

(Themenstarter)

Anmeldungsdatum:
1. Oktober 2007

Beiträge: Zähle...

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?

kf2

(Themenstarter)

Anmeldungsdatum:
1. Oktober 2007

Beiträge: Zähle...

okay. hab ein paar tests gemacht. wenn ich das ppp0 interfaces tracke, sind es genau die pakete, die über das Internet empfangen werden.
Es stellt sich nur noch die Frage die der void *packet point zu interpretieren ist......

while( true )
{
       packet = pcap_next(descr, &hdr); 
       // was ist das für ein paket?
       // ethernet? pppoe? ip? tcp?
}

Würde mich wirklich über ein paar ideen freuen. ☹

kf2

(Themenstarter)

Anmeldungsdatum:
1. Oktober 2007

Beiträge: 82

So mit ein wenig rumprobieren komm ich auf folgende Lösung: 😬

Definition der TCP/IP Paket-stellen

#define SIZE_PAYLOAD_HEADER_LENGTH_PPP     16
#define SIZE_PAYLOAD_HEADER_LENGTH_ETH     14

// für ppp0 verbindungen
sniff *ip = (sniff_ip*) (packet+SIZE_PAYLOAD_HEADER_LENGTH_PPP)

oder für eth0,eth1 verbindungen
sniff *ip = (sniff_ip*) (packet+SIZE_PAYLOAD_HEADER_LENGTH_ETH)

analog funktioniert das für eth0 oder eth1.. mit SIZE_PAYLOAD_HEADER_LENGTH_ETH

Okay. In der Doku scheint somit einiges falsch hinterlegt zu sein. Der PPPoE Header wird in diesem Fall nicht übersprungen. pcap liefert grundsätzlich den raw-point zum Netzwerkpaket. Daher sind für das TCP/IP Paket folgende Header zu beachten.

ppp0 >> (Ethernet hdr + PPPoe hdr)
eth0 >> (Ehternet hdr )

Antworten |