Я использую этот фильтр для прослушивания ICMP-ответов:
sniff(iface=iface,filter="ip proto \\icmp", prn=printp, count=0)
Он отлично работает в оболочке scapy, но если я запускаю его в сценарии python, ничего не происходит. Даже ошибки не возникает.
Код пакета, который я отправляю, выглядит примерно так:
s = conf.L2socket(iface='enp0s3')
packet = Ether()/IP(id=3000, ttl=1, src=srcip, dst=dstip)/UDP(sport=sport, dport=dport)
s.send(packet)
Я даже вижу отвечающий пакет в wireshark.
Python версия: 3.9.6
ОС: Ubuntu 18.04.3
Версия Scapy: 2.4.3
Если я использую функцию lfilter
, она отлично работает.
sniff(iface=iface,lfilter=lambda pkt: ICMP in pkt, prn=printp, count=0)
Но я бы предпочел использовать обычную функцию фильтра, потому что lfilter
потребляет много ресурсов процессора.