使用 Python 和 Scapy 在 Pi 上嗅探 ARP

use*_*851 12 python arp scapy

我正在尝试使用 Raspberry Pi 查找来自我网络上特定无线设备的 ARP 请求。它是亚马逊仪表板按钮之一。有人使用此代码来收听仪表板何时连接到 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)
Run Code Online (Sandbox Code Playgroud)

当我在 Raspbian(安装了 python 和 scapy)上运行它时,出现错误

"IndexError: Layer [ARP] not found"
Run Code Online (Sandbox Code Playgroud)

我完全不熟悉 scapy,只是第一次潜水。感谢您的任何想法。

小智 7

我也在做同样的事情。我发现它tcpdump没有安装。

一个简单的sudo apt-get install tcpdump为我修复了这个错误。


wpn*_*pns 6

我有同样的错误,但发现它不会可靠地发生,有时它会立即失败:

IndexError: Layer [ARP] not found
Run Code Online (Sandbox Code Playgroud)

有时它会永远运行。

提示:count=0在打印嗅探行中设置让它永远运行,计数似乎是超时。

我最初从网站上安装了 scapy,但最终做了:

apt-get update
apt-get upgrade
apt-get install tcpdump tcpreplay wireshark python-scapy
Run Code Online (Sandbox Code Playgroud)

它在运行时似乎运行得很好。不确定我是否需要以上所有内容,但是 python-scapy 在我安装时推荐了它们(以及一堆图形例程)。

附录:每次我摆弄代码时,它运行而不崩溃的可能性都会发生变化,所以发生了一些非常奇怪的事情。