Фильтрация scapy с помощью функции sniff ()

Я использую scapy функцию sniff () для захвата пакетов. Я хочу захватить только пакеты EAP. Я могу фильтровать пакеты EAP с помощью tcpdump со следующим фильтром:

 # tcpdump -i mon0 -p ether proto 0x888e
 tcpdump: ПРЕДУПРЕЖДЕНИЕ: mon0: нет адреса IPv4
 tcpdump: расширенный вывод подавлен, используйте -v или -vv для полного декодирования протокола
 прослушивание по mon0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), размер захвата 65535 байт
 13: 04: 41.949446 80847234901us tsft 48.0 Mb / s 2437 МГц 11g -16dB сигнальная антенна 1 [бит 14] EAP-пакет (0) v1, len 5
 13: 04: 46.545776 80851831746us tsft 54,0 Мбит / с 2437 МГц 11g -13dB сигнальная антенна 1 [бит 14] EAP-пакет (0) v1, len 5

В то же время у меня есть функция sniff (), работающая с тем же фильтром, но функция не захватывает никаких пакетов EAP:

 sniff (фильтр = "эфир proto 0x888e", iface = "mon0", count = 1)

Почему функция sniff () не захватывает какие-либо пакеты EAP?

РЕДАКТИРОВАТЬ:

Извините за мою позднюю реакцию, я попробовал то, что вы предложили:

> conf.iface = 'mon0' > pkts = sniff(filter="wlan proto 0x888e", count = 1) tcpdump: WARNING: mon0: no IPv4 address assigned > pkts Sniffed: TCP:0 UDP:0 ICMP:0 Other:1 > EAP in pkts[0] False 

Но это еще не захватывает пакет EAP 🙁

4 Solutions collect form web for “Фильтрация scapy с помощью функции sniff ()”

Я знаю, что это более года спустя, но для кого-то другого, кто смотрит на этот вопрос, ответ заключается в том, что он захватил пакеты EAPOL, а не EAP-пакеты. Используя команду

 sniff(filter="ether proto 0x888e", count=4) 

0x888e относится к EAPOL в протоколе ethernet, что требует использования эфирного прото, а не протона wlan. Я не уверен, что 0888e можно отнести к чему-либо в wlan proto, но после почти идентичной операции с op (кроме замены «wlan» на «ether»), я получил

 >>> EAP in b[0] False 

Однако когда я вхожу

 >>> EAPOL in b[0] True 

Я полагаю, что OP захватил то, что искал его код (2 пакета EAPOL), но он не захватил то, что, по его мнению, он искал, – 2 пакета EAP.

Редактировать. Даже когда я заменяю эфир wlan, я все еще придумываю EAP как false и EAPOL как true.

Здесь у вас может быть несколько вопросов, поэтому позвольте мне обратиться к тому, что я только что встретил сегодня.

Во-первых, как видно из следующего отчета об ошибке: http://trac.secdev.org/scapy/ticket/537 – Scapy не соблюдает параметр iface в функции sniff. Поэтому, чтобы правильно установить iface, вам придется использовать:

 conf.iface = 'mon0' 

Надеюсь, это позволит вам добавить фильтр и фактически получить пакеты через провод.

Если вы нюхаете mon0, и это беспроводной интерфейс, вы можете попробовать использовать wlan proto вместо ether proto, но у меня нет сети для тестирования пакетов EAP, чтобы помочь дальше.

Вы используете tcpdump в то же время, что и scapy sniff?

Scapy может эмулировать TCPDUMP просто отлично. Просто запустите их по одному.

Я думаю, что это все частичные ответы, и это сработало для меня. Я сделал:

 conf.iface='wlan0.mon' a=sniff(filter='ether proto 0x888e', prn=lambda x: x.summary(), count=100, store=1) 

Затем я сгенерировал обмен EAPOL, вручную отключив устройство от сети WPA. Когда он попытался повторно связать, я захватил 4-сторонний обмен EAPOL. Сделайте счет> 4, потому что, скорее всего, будут повторные передачи кадров. AFAIK, scapy не декодирует данные KEY, поэтому он сбрасывается как шестнадцатеричная строка.

  • Как создать пакет Scapy из необработанных байтов
  • Python-Scapy или тому подобное. Как создать HTTP-запрос GET на уровне пакета
  • Scapy.all import * не работает
  • Необработанные сокеты и sendto в python
  • Можно использовать Scapy только в интерактивном режиме?
  • Пакетное здание с Scapy и Gevent
  • Как проверить наличие слоя в scapy-пакете?
  • Человек в средней атаке с косой
  • Python - лучший язык программирования в мире.