Raw Sockets

Objektorientierte Skriptsprache: (python.org)
Antworten
Benutzeravatar
Fisherman
Beiträge: 84
Registriert: Mi Jun 06, 2012 4:53 am
Wohnort: 127.0.0.1

Raw Sockets

Beitrag von Fisherman » Mi Apr 03, 2013 12:35 pm

Hallo zusammen,

ich bastel gerade an einem Python Netzwerk Sniffer und habe das Problem, das ich trotz aktivierten promisc Mode nur die zugesandten Pakete empfange, aber nicht die am gleichen PC gesendeten (2. Konsole ping -c1 http://www.google.de)
Wenn ich das ganze in Wireshark anschaue, sehe ich beide, sprich Anfrage und Antwort. Vielleicht jemand eine Idee wie ich unter Python auch die gestellten Anfragen vom gleichen Rechner "lesen" kann, oder eine andere Idee woran es liegen könnte?


# root

Code: Alles auswählen

ifconfig eth0 promisc
ifconfig eth0

Code: Alles auswählen

eth0      Link encap:Ethernet  Hardware Adresse xx:xx:xx:xx:xx:xx  
          inet Adresse:192.168.xxx.xxx  Bcast:192.168.xxx.255  Maske:255.255.255.0
          inet6-Adresse: fe80::xxxx:xxxx:xxxx:xxxx/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metrik:1
          RX packets:21420 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15138 errors:0 dropped:0 overruns:0 carrier:1
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:19808386 (18.8 MiB)  TX bytes:2844448 (2.7 MiB)
          Interrupt:43 
# root - Relevanter Code Schnipsel

Code: Alles auswählen

...
import socket
...
rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
pkt = rawSocket.recvfrom(2048)
Gruß Fisherman
There is no place like 127.0.0.1

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Raw Sockets

Beitrag von nufan » Mi Apr 03, 2013 1:00 pm

Fisherman hat geschrieben:# root - Relevanter Code Schnipsel

Code: Alles auswählen

...
import socket
...
rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
pkt = rawSocket.recvfrom(2048)
Sicher, dass du hier das socket.htons() brauchst? Ich würde einfach die Konstante socket.IPPROTO_IP nehmen. Andererseits würde es dann beim eingehenden Traffic auch nicht funktionieren...
Deinen Skript hab ich ja nicht zum Testen, aber mit scapy läufts übrigens ohne Probleme ^^

Benutzeravatar
Fisherman
Beiträge: 84
Registriert: Mi Jun 06, 2012 4:53 am
Wohnort: 127.0.0.1

Re: Raw Sockets

Beitrag von Fisherman » Mi Apr 03, 2013 1:24 pm

Danke für die schnelle Antwort. Scapy habe ich extra nicht genommen um mich wirklich mit den Protokollen selbst auseindersetzen zu müssen ....

Habe die Lösung gefunden :

Code: Alles auswählen

socket.socket( socket.AF_PACKET , socket.SOCK_RAW , socket.ntohs(0x0003))
Danke für den Hinweis ....
There is no place like 127.0.0.1

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Raw Sockets

Beitrag von nufan » Mi Apr 03, 2013 2:55 pm

Wollte ich grade schreiben ^^ Hab mir nämlich den Scapy-Code angesehen, in dem "ETH_P_ALL" mit dem Wert 3 initialisiert wird. Den Code findest du (natürlich nur wenn du scapy installiert) unter /usr/share/pyshared/scapy.

Antworten