Seite 1 von 1

Raw Sockets

Verfasst: Mi Apr 03, 2013 12:35 pm
von Fisherman
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

Re: Raw Sockets

Verfasst: Mi Apr 03, 2013 1:00 pm
von nufan
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 ^^

Re: Raw Sockets

Verfasst: Mi Apr 03, 2013 1:24 pm
von Fisherman
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 ....

Re: Raw Sockets

Verfasst: Mi Apr 03, 2013 2:55 pm
von nufan
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.