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?
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?
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)
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
versuchen, eine andere IP-Adresse zu pingen? – macfij
Mein Problem war mein MAC hatte Großbuchstaben und Scapy liefert Kleinbuchstaben. Funktioniert wunderbar =) – bzupnick
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).
können Sie die Schnittstelle verwenden? –
Kannst du etwas tiefer erklären? – bzupnick