PythonとScapyを使用してPiでARPを探る


12

Raspberry Piを使用して、ネットワーク上の特定のワイヤレスデバイスからのARP要求を見つけようとしています。Amazonのダッシュボタンの1つです。誰かがこのコードを使用して、ダッシュボードが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"

私は全く怖がらず、初めて潜入するだけです。アイデアをありがとう。


これは機能しましたか?私はその問題を過ぎてしまったが、それでも私のボタンからARPリクエストを見ることができない
-jbnunn

@jbnunnこの答えは私のために働いstackoverflow.com/questions/24415294/...
Katu

回答:


7

私も同じことをしています。私が見つけたのは、tcpdumpインストールされていないことです。

sudo apt-get install tcpdumpこのエラーは単純に修正されました。


6

同じエラーが発生しましたが、確実に発生するわけではなく、次のエラーですぐに失敗することもあります。

IndexError: Layer [ARP] not found

そして時々それは永遠に実行されます。

ヒント:count=0印刷スニフ行で設定すると、永久に実行され、カウントはタイムアウトのように見えます。

私は最初にWebサイトからscapyをインストールしていましたが、最終的にはそうしました:

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

そして、それが実行されたときにうまく動作するようです。上記のすべてが必要かどうかはわかりませんが、python-scapyはインストール時にそれら(および多数のグラフィックルーチン)を推奨しました。

補遺:コードをいじるたびに、クラッシュせずに実行される可能性が変化するため、本当に奇妙なことが起こっています。


1

ここでも同じ問題があり、1つの条件を確認するのを忘れていました。

すべてのifブロックの前にこの行を追加してください:

if pkt.haslayer(ARP):

0

Raspy B 2012では、CPUの50%以上を消費します。

私が試したのは

sniff(filter = "tcp and port 123"、prn = print_summary、store = 0)

ダッシュボタンリクエストを、Scapyがファイアウォール経由で実行されるマシンのIPにリダイレクトしました。アイデアは、リソースを節約し、MACアドレスのすべてのトラフィックを監視するのではなく、ポートへの接続要求のみを監視することでした。

これは約30%のCPUを消費します。Ubuntuマシンでは動作しますが、Raspi Bでは動作を開始するのに約5分かかり、Ubuntuマシンでは実行できないネットワーク全体からの接続を表示します。Raspy Musicboxイメージで壊れていると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.