Python Packet Sniffing / Packet Capture — pcapy не захватывает пакеты

У меня есть беспроводной интерфейс в режиме монитора, и я могу успешно перехватывать сетевые пакеты и анализировать их с помощью Wireshark. Я пытался реализовать нечто подобное с помощью pcapy. и impacket. Похоже, что pcapy не перехватывает те же пакеты, что и Wireshark. В настоящее время я работаю на Mac OS X 10.9 с Macbook Pro 2012 года, но заметил такое же поведение на Ubuntu с беспроводным USB-адаптером TP-LINK TL-WN722N.

Вот пример написанного мной сценария, который явно не работает. Я не получаю запросов зондирования с помощью pcapy, хотя я вижу их в Wireshark.

import pcapy
import impacket

DECODER = impacket.ImpactDecoder.RadioTapDecoder()


def packet_handler(header, data):
   radio_packet = DECODER.decode(data)
   dot11 = radio_packet.child()
   if dot11.get_subtype() == impacket.dot11.Dot11Types.DOT11_SUBTYPE_MANAGEMENT_PROBE_REQUEST:
       management_base = dot11.child()
       if management_base.__class__ == impacket.dot11.Dot11ManagementFrame:
           print management_base.get_source_address(), management_base.get_destination_address()


p = pcapy.open_live("your_interface_here", 2000, 0, 1000)
p.loop(-1, packet_handler)

В этом примере en1 находится в режиме мониторинга. Это прекрасно работает с использованием файла pcap, сгенерированного из Wireshark, просто изменив open_live на open_offline:

p = open_offline('path_to_file')

Я неправильно настроил pcapy?


person Jordan Messina    schedule 29.03.2014    source источник
comment
Я бы подумал об использовании scapy вместо pcapy, если вы используете python 2.7   -  person thecreator232    schedule 30.03.2014
comment
Я думал о scapy, и хотя он решает проблему с режимом монитора, по какой-то причине я не могу захватить столько пакетов. Не уверен, что у тебя есть мысли по этому поводу?   -  person Jordan Messina    schedule 30.03.2014
comment
хорошо, я использовал scapy совсем немного, никогда не на Mac OS. Можете ли вы записать команду sniff, которую вы использовали для захвата? и что вы подразумеваете под тем, что он не захватывает столько пакетов?   -  person thecreator232    schedule 30.03.2014
comment
Я написал библиотеку Python/C для libpcap и широко использую ее для исследования Wi-Fi. Возможно, это может быть вам полезно - pypcap   -  person Kiran Bandla    schedule 31.03.2014


Ответы (1)


Если вы захватили некоторые пакеты, но не все пакеты, которые вы видите в Wireshark, попробуйте включить неразборчивый режим (должен захватывать все, даже пакеты с неверными контрольными суммами):

1) Настройте неразборчивый режим для pcapy

promiscuous = True
p = pcapy.open_live("your_interface_here", 2000, promiscuous, 1000)

2) Настройте неразборчивый режим для вашего интерфейса. Не знаю, как это сделать на Mac, в Linux это:

os.system('sudo ifconfig eth0 promisc')

затем выключите и закройте свой интерфейс.

Были те же проблемы с pcapy и медным Ethernet. Вышеупомянутые трюки решили проблему для меня.

person Konstantin    schedule 31.03.2014