使用Python和Scapy嗅探Pi上的ARP


12

我正在尝试使用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)

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

"IndexError: Layer [ARP] not found"

我完全不了解船尾,只是第一次潜水。感谢您的任何想法。


你有没有做这个工作?我已经解决了这个问题,但是仍然无法从我的按钮看到ARP请求
jbnunn

@jbnunn这个答案对我有用stackoverflow.com/questions/24415294/…–
Katu

Answers:


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%的CPU。

我试过的是

嗅探(过滤器=“ tcp和端口123”,prn = print_summary,store = 0)

我通过防火墙将Dash-button请求重定向到运行Scapy的计算机的IP。这样做的目的是节省资源,而不是监视所有的mac地址,而是仅监视端口上的连接请求。

这会消耗约30%的Cpu。它可以在Ubuntu机器上运行,但是在Raspi B上大约需要5分钟才能开始工作,然后显示来自我的网络的连接-在Ubuntu机器上却没有。我认为它在Raspy Musicbox图片上损坏了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.