Использование Python и Scapy для анализа ARP на Pi


12

Я пытаюсь использовать Raspberry Pi для поиска ARP-запросов от определенного беспроводного устройства в моей сети. Это одна из тех кнопок Амазонки. Кто-то использовал этот код для прослушивания, когда прибор подключается к Wi-Fi.

from scapy.all import *
def arp_display(pkt):
  if pkt[ARP].op == 1: #who-has (request)
    if pkt[ARP].psrc == '0.0.0.0': # ARP Probe
      if pkt[ARP].hwsrc == '74:75:48:5f:99:30': # button 1
        print "Pushed Huggies"
      elif pkt[ARP].hwsrc == '10:ae:60:00:4d:f3': # button 2
        print "Pushed Elements"
      else:
        print "ARP Probe from unknown device: " + pkt[ARP].hwsrc

print sniff(prn=arp_display, filter="arp", store=0, count=10)

Когда я запускаю это на Raspbian (с установленными python и scapy), я получаю сообщение об ошибке

"IndexError: Layer [ARP] not found"

Я совершенно незнаком со Scapy и просто ныряю в первый раз. Спасибо за любые идеи.


Вы когда-нибудь работали? Я справился с этой проблемой, но все еще не вижу запроса ARP от моей кнопки
jbnunn

@jbnunn этот ответ работал для меня stackoverflow.com/questions/24415294/...
Кату

Ответы:


7

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

Простой sudo apt-get install tcpdumpисправил эту ошибку для меня.


6

У меня была та же ошибка, но я обнаружил, что она не происходит надежно, иногда она сразу же завершается с помощью:

IndexError: Layer [ARP] not found

и иногда это работает вечно.

Подсказка: установите count=0в строке анализатора печати, чтобы она работала вечно, счетчик выглядит как тайм-аут.

Я изначально установил scapy с сайта, но в итоге сделал:

apt-get update
apt-get upgrade
apt-get install tcpdump tcpreplay wireshark python-scapy

и, кажется, работает нормально, когда работает. Не уверен, что мне нужно все вышеперечисленное, но python-scapy рекомендовал их (и несколько графических процедур), когда я его установил.

Дополнения: Каждый раз, когда я играю с кодом, вероятность того, что он будет работать без сбоев, меняется, так что происходит что-то действительно странное.


1

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

Просто добавьте эту строку перед всеми блоками if:

if pkt.haslayer(ARP):

0

на моем Raspy B 2012 он съедает> 50% процессора.

Что я пробовал

снифф (filter = "tcp and port 123", prn = print_summary, store = 0)

Я перенаправил запросы Dash-button на IP-адрес компьютера, на котором Scapy работает через мой Firewall. Идея заключалась в том, чтобы сохранить ресурсы и не отслеживать весь трафик для адресов Mac, а только наблюдать за запросами на подключение к порту.

Это потребляет ~ 30% ЦП. Он работает на машине с Ubuntu, но на Raspi B требуется около 5 минут, чтобы начать работать, а затем показывает Соединения со всей моей сети - чего нет на машине с Ubuntu. Я предполагаю, что это сломано на Raspy Musicbox образе.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.