PythonとScapyを使用したPiのARPスニッフィング

PythonとScapyを使用したPiのARPスニッフィング

ネットワーク内の特定のワイヤレスデバイスからのARP要求を見つけるためにRaspberry Piを使用しようとしています。これは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"

私はscapyに完全に初めて接した。それはスキャピーとの最初の接触です。どんなアイデアもありがとうございます。

答え1

私も同じことをしています。探してみるとtcpdumpインストールができませんでしたね。

簡単な方法でsudo apt-get install tcpdumpこのエラーを修正しました。

答え2

同じエラーが発生しましたが、安定して発生せず、時にはすぐ​​に失敗することがわかりました。

IndexError: Layer [ARP] not found

時には永遠に実行されます。

ヒント:count=0永久に実行するように印刷スニフラインに設定すると、カウントがタイムアウトするようです。

私は最初にウェブサイトからscapyをインストールしましたが、最終的には次のことをしました。

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

そして、ランタイムが正常に動作しているようです。上記のすべてが必要かどうかはわかりませんが、python-scapyはインストール時に複数のグラフィックルーチンで推奨されていました。

付録:コードを操作するたびに衝突の可能性なしに実行されるため、非常に奇妙なことが起こっています。

答え3

ここでも同じ問題が発生しましたが、条件を確認するのを忘れてしまったことがわかりました。

すべてのifブロックの前に次の行を追加します。

if pkt.haslayer(ARP):

答え4

私のRaspy B 2012はCPUの50%以上を占めています。

私が試したことは

sniff(filter="tcp とポート 123", prn=print_summary,store=0)

ファイアウォールを介してダッシュボタン要求をScapyを実行しているコンピュータのIPにリダイレクトします。アイデアは、リソースを節約し、Macアドレスへのすべてのトラフィックを監視するのではなく、ポートからの接続要求のみを監視することです。

これはCPUの約30%を消費します。 Ubuntuシステムでは動作しますが、Raspi Bでは作業を開始してからネットワーク全体の接続を表示するのに約5分かかります。 Ubuntuシステムではそうではありません。 Raspy Musicboxの画像が壊れていると思います。

関連情報