następujący kod:Jak filtrować przez ethernet adres MAC
sniff(filter = "dst aa:bb:cc:dd:ee")
zgłasza błąd, ponieważ sniff
spodziewa IP, a nie Mac.
Więc jak filtrować według MAC?
następujący kod:Jak filtrować przez ethernet adres MAC
sniff(filter = "dst aa:bb:cc:dd:ee")
zgłasza błąd, ponieważ sniff
spodziewa IP, a nie Mac.
Więc jak filtrować według MAC?
co z określeniem lfilter
dla sniff
?
zzz = sniff(lfilter=lambda d: d.src == 'aa:bb:cc:dd:ee:ff')
dst
i src
są atrybutami powąchał wiadomości.
wcześniej wysłałem odpowiedź, w której podano stop_filter
. Przypuszczam, że to by nie działało dla ciebie, ponieważ scapy zatrzymałby się po odebraniu pierwszego pakietu, który pasuje do adresu mac z stop_filter
. lfilter
powinien wykonać zadanie.
z sendrecv.py
:
lfilter: python function applied to each packet to determine
if further action may be done
ex: lfilter = lambda x: x.haslayer(Padding)
Próbowałem twojej odpowiedzi z lfilter w moim scenariuszu i tłumaczu. Pingowałem z właściwego źródłowego adresu MAC i wydawało się, że nie sniff go. – bzupnick
spróbuj pingować inny adres IP? – macfij
Mój problem polegał na tym, że mój MAC miał wielkie litery, a Scapy dostarcza małe litery. Działa pięknie =) – bzupnick
Parametr filter
potrzebuje filtra BPF. Poprawna składnia jest zatem filter="ether dst aa:bb:cc:dd:ee:ff"
.
Jest to (znacznie) szybsze niż użycie funkcji Pythona jako parametru lfilter
, co zasugerował (poprawnie) użytkownik macfij w innej odpowiedzi (plus nie musisz zajmować się dużymi/małymi literami w adresach MAC).
Czy możesz korzystać z interfejsu? –
Czy możesz wyjaśnić nieco głębiej? – bzupnick