2014-06-24 10 views
5

Der folgende Code:Wie filtern durch Ethernet-MAC-Adresse

sniff(filter = "dst aa:bb:cc:dd:ee") 

wirft einen Fehler, da sniff eine IP erwartet, keine MAC.

Also, wie soll man nach MAC filtern?

+0

können Sie die Schnittstelle verwenden? –

+0

Kannst du etwas tiefer erklären? – bzupnick

Antwort

1

was ist mit specyfing a lfilter für sniff?

zzz = sniff(lfilter=lambda d: d.src == 'aa:bb:cc:dd:ee:ff') 


dst und src sind Attribute roch Nachricht.


zuvor habe ich eine Antwort geschrieben, wo stop_filter angegeben wurde. Ich nehme an, dass es für Sie nicht funktionieren würde, da scapy nach dem Empfang des ersten Pakets, das mit der MAC-Adresse übereinstimmt, aufhören würde, von stop_filter. lfilter sollte den Job machen.

von sendrecv.py:

lfilter: python function applied to each packet to determine     
     if further action may be done           
     ex: lfilter = lambda x: x.haslayer(Padding) 
+0

Ich habe deine Antwort mit dem lfilter in meinem Skript und im Interpreter versucht. Ich pingte von der richtigen Quelle MAC und es schien nicht zu schnüffeln. – bzupnick

+0

versuchen, eine andere IP-Adresse zu pingen? – macfij

+0

Mein Problem war mein MAC hatte Großbuchstaben und Scapy liefert Kleinbuchstaben. Funktioniert wunderbar =) – bzupnick

2

Der filter Parameter einen BPF-Filter benötigt. Die korrekte Syntax lautet daher filter="ether dst aa:bb:cc:dd:ee:ff".

Dies ist (viel) schneller als die Verwendung einer Python-Funktion als lfilter Parameter, wie von Macfij in einer anderen Antwort (richtig) vorgeschlagen (plus Sie müssen nicht mit Groß-/Kleinbuchstaben in MAC-Adressen beschäftigen).