Netzwerktraffic capturen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Basilisk
User
Beiträge: 6
Registriert: Mittwoch 16. April 2008, 17:38

Mittwoch 16. April 2008, 18:02

Hallo zusammen,

ich bin neu hier und würde mich freuen wenn mir jemand helfen könnte.
Python programmiere ich noch nicht so lange, aber ich möchte es lernen (was bisher auch recht gut klappt) und möchte ein Programm schreiben, welches in einem Netzwerk den Traffic captured. Wenn das klappt würde ich die Informationen gerne so auslesen um etwa zu gucken, welche Rechner alle in diesem Netzwerk sind und kommunizieren.
Doch nun erst mal zum Capturen. Das sollte ja eigentlich mit dem Modul pcapy und der open_live Funktion gehen, allerdings wird bei mir entweder nichts gelesen oder das Programm friert ein. (Was passiert ist abhängig davon ob ich eth0 oder eth1 als Device wähle, ausgeführt wird das Programm unter Linux auf Kommandozeile).
Hat da vllt jemand einen Tipp was ich falsch mache, bzw ob mein ganzer Ansatz evtl falsch ist?

Das Reader-Objekt, das mir die open_live Methode zurück gibt, müsste ich dann auslesen und die Informationen verarbeiten, richtig?


Eine andere Frage habe ich auch noch: Mit dem Modul urllib bspw kann man uA http-requests an eine Adresse schicken. Habe ich auch die möglichkeit, solche requests elementar zu verändern, so dass bei dem Server zB keine http-Anfrage sondern eine gttp-Anfrage ankommt? Der Sinn wäre, einen Server auf seine "Fehlerkonformität" zu testen, wenn bspw Bits in einer Anfrage nicht richtig übertragen werden. Diese falschen Anfragen möchte ich irgendwie simulieren.

Vielen Dank schon mal für Eure Hilfe.

Grüße
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Mittwoch 16. April 2008, 18:49

Grundsätzlich müsste das (unter Linux) auch mit einem Raw Socket und dem Netzwerk Interface im promiscous Mode. Zum auswerten der IP header kannst du dann das struct Modul verwenden.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 16. April 2008, 19:31

Basilisk hat geschrieben:Eine andere Frage habe ich auch noch: Mit dem Modul urllib bspw kann man uA http-requests an eine Adresse schicken. Habe ich auch die möglichkeit, solche requests elementar zu verändern, so dass bei dem Server zB keine http-Anfrage sondern eine gttp-Anfrage ankommt? Der Sinn wäre, einen Server auf seine "Fehlerkonformität" zu testen, wenn bspw Bits in einer Anfrage nicht richtig übertragen werden. Diese falschen Anfragen möchte ich irgendwie simulieren.
Was soll denn GTTP sein?

Was du suchst bezeichnet man übrigens als fuzzing, entsprechende Programme sind Fuzzer.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Basilisk
User
Beiträge: 6
Registriert: Mittwoch 16. April 2008, 17:38

Mittwoch 16. April 2008, 21:25

Vielen Dank für Eure Antworten.
Gibt es ein Python-Modul für Raw Sockets, oder wie meintest du das sonst?


@Leonidas: Mir ist klar dass es GTTP nicht als Protokoll gibt, aber normal wird an einen Webserver eine GET Anfrage gestellt und danach das Protokoll genannt in welchem die Übertragung statt finden soll. Ich möchte dann, indem ich gezielt solche Anfragen ändern kann, eben mal sehen, wie sich die Server auf Anfragen mit leichten Fehlern, bspw also GTTP statt HTTP in der Protokollbezeichnung verhalten.

Geht in Richtung Fuzzing, ja. Nur das ich halt keine zufälligen Eingaben auf Software loslasse sondern meinen Webserver mit bewussten Fehlinformationen füttern will.

Schönen Abend noch.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 16. April 2008, 21:43

Basilisk hat geschrieben:@Leonidas: Mir ist klar dass es GTTP nicht als Protokoll gibt, aber normal wird an einen Webserver eine GET Anfrage gestellt und danach das Protokoll genannt in welchem die Übertragung statt finden soll. Ich möchte dann, indem ich gezielt solche Anfragen ändern kann, eben mal sehen, wie sich die Server auf Anfragen mit leichten Fehlern, bspw also GTTP statt HTTP in der Protokollbezeichnung verhalten.
Naja, du kannst gucken wo in der httplib HTTP/1.0 eingesetzt wird und zur Not das einfach Monkeypatchen. Schön ist das zwar nicht, wenn du so etwas in größerem Maßstab machen willst, wärs wohl sinnvoller, deine eigene Bibliothek zu schreiben, sofern das nicht schon jemand gemacht hat.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Basilisk
User
Beiträge: 6
Registriert: Mittwoch 16. April 2008, 17:38

Donnerstag 17. April 2008, 08:20

Monkeypatchen werde ich gleich mal versuchen, eigene lib schreiben wäre ein entferntes Ziel, allerdings muss ich dazu erst mal wissen wie ich genau die Anfragen aufbauen muss... Ich arbeite dran :D
lunar

Montag 21. April 2008, 13:16

Fehlerhafte HTTP-Übertragungen simulierst du wohl am besten, wenn du selbst über Sockets manuelle HTTP-Anfragen verschickst. So wahnsinnig komplex ist HTTP nicht, als dass man unbedingt urllib nutzen müsste.

Was das Capturen angeht: Läuft dein Programm denn überhaupt mit den nötigen Rechten? Unter Linux und unter Windows ab XP benötigt ein Programm erweiterte Rechte, um Raw-Sockets zu öffnen, die wiederrum zum Sniffen nötig sind. Unter Windows gibt es da sicher irgendeine Gruppenrichtlinien-XY-Einstellung (ich kenne mich mit Windows nicht aus), unter Linux braucht das Programm root-Rechte.

Fehlende Rechte würden beides erklären, sowohl fehlende Pakete als auch das Einfrieren (wenn das Modul endlos auf eintreffende Pakete wartet).

Ich persönlich würde ja pcapy empfehlen, die darunter liegende libpcap wird auch von wireshark und iirc auch von nmap genutzt.
Antworten