Використання Python та Scapy для нюхання ARP на Pi


12

Я намагаюся використовувати Raspberry Pi, щоб знайти ARP-запити від конкретного бездротового пристрою в моїй мережі. Це одна з таких кнопок Amazon. Хтось використовував цей код для прослуховування, коли тире підключається до wifi.

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"

Мені абсолютно незнайомий скапій і просто пірнаю вперше. Дякую за будь-які ідеї.


Ви коли-небудь працювали над цим? Я минув цю проблему, але досі не бачу запиту ARP з моєї кнопки
jbnunn

@jbnunn ця відповідь спрацювала для мене stackoverflow.com/questions/24415294/…
Кату

Відповіді:


7

Я теж роблю те саме. Я знайшов, що tcpdumpце не було встановлено.

Проста sudo apt-get install tcpdumpвиправлена ​​для мене помилка.


6

У мене була така ж помилка, але виявлено, що вона не трапляється надійно, іноді вона виходить з ладу відразу:

IndexError: Layer [ARP] not found

а іноді це працює вічно.

Підказка. Встановіть count=0у рядку нюху друку так, щоб він працював назавжди, як вважається, час очікується.

Я спочатку встановив скапі з веб-сайту, але закінчив робити:

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% процесора.

Те, що я спробував, було

sniff (filter = "tcp і порт 123", prn = print_summary, store = 0)

Я перенаправив запити кнопок Dash до IP машини, де Scapy працює через мій Брандмауер. Ідея полягала в тому, щоб зберегти ресурси та не відслідковувати весь трафік за адресами mac, а лише дивитися запити на з'єднання до порту.

На це витрачається ~ 30% ЦПУ. Він працює на машині Ubuntu, але для роботи Raspi B потрібно близько 5 хвилин, щоб почати працювати, а потім показує З'єднання з усієї моєї мережі - що не робиться на машині Ubuntu. Я припускаю, що його зламали на зображенні Raspy Musicbox.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.