2

Scapy を使用して Wi-Fi クライアント リクエスト フレームをキャプチャしています。クライアントの MAC アドレスと要求された SSID アドレスだけに関心があります。私は次のようなことをします。

sniff(iface="mon0", prn=Handler)

def Handler(pkt):
    if pkt.hasLayer(Dot11):
       if pkt.type == 0 and pkt.subtype == 4:
           print pkt.addr2 + " " + pkt.info

私の問題は、処理能力が限られている組み込みデバイスでこれを行っていることです。スクリプトを実行すると、プロセッサの使用率が 100% 近くまで上昇します。これは、Scapy がスニッフィングして Python コードに渡す膨大な量のフレームのためだと思います。また、sniff コマンドで適切なフィルターを使用できれば、使用されていないフレームの多くを排除して、プロセッサの負荷を軽減できると思います。

これを行うために使用できるフィルターステートメントはありますか?

4

2 に答える 2

2

データをデコードする方法が原因で、Scapy は非常に遅くなります。してもいいです

  • 入力に ​​BPF フィルターを使用して、探しているフレームのみを取得してから、scapy に渡します。たとえば、このモジュールを参照してください。モジュールはまず libpcap を使用して無線またはファイルからデータを取得し、動的に更新される BPF フィルターを介してデータを渡し、不要なトラフィックを遮断します。
  • cでwifi用の独自のパーサーを作成します(必要な情報量が限られていることを考えると、それほど難しくありませんが、プリズムヘッドのようなものがあります)
  • サブプロセスとしてwiresharkのtsharkを使用し、そこからデータを収集します

3 番目のアプローチを強くお勧めしますが、wiresharek には 120 MB を超えるライブラリが付属しており、組み込みデバイスが処理できない可能性があります。

于 2013-08-30T16:59:18.713 に答える