Scapy:パケットの周波数またはチャネルの取得/設定


8

LinuxでWIFIパケットをキャプチャして、パケットがキャプチャされた周波数/チャネルを確認しようとしています。Wiresharkを試したところ、運も助けもありませんでした。Wiresharkからのサンプルパケットを使用していますが、周波数/チャネルを確認できます。

だから今私はスケイピーで実験しています。スニッフィングされたパケットの周波数/チャネルを把握したかったのですが、まだ運がありません。Scapyでこれを行う方法はありますか?

PS ScapyやPythonよりも優れたツールがある場合は、コメントをいただければ幸いです。


有効な回答は、特定の周波数/チャネルでパケットを送信する方法について詳細な回答を提供するものです
Baby desta

2
最終的に何をしたいかに応じて、bettercap.org
Fabian N.

@FabianN。、ありがとう。今それを調べています。
ベビーデスタ

回答:


5

私が判明 RadioTabヘッダは任意DOT11プロトコルの一部ではなく、単にネットワーク・インタフェースによって追加されていること。また、Wiresharkのキャプチャからではなく、Wireshark.orgからのサンプルパケットでRadioTabヘッダーを取得した理由は、一部のネットワークアダプターがRadioTapを追加しない一方で、他のネットワークアダプターはRadioTabヘッダーを追加しないためです。新しい外部WiFiアダプターでこれを確認したところ、RadioTapヘッダーが追加されました。

アダプターがフレームをキャプチャするときに追加情報を挿入しない場合、ラジオタップヘッダーは追加されません。

だから私の主な質問は、パケットの頻度を取得/設定する方法です。私はScapyにこのオプションがあることを期待していましたが、そうではありませんし、そうすべきではありません。その理由は、頻度はネットワークアダプターでの設定に依存するためです。それで私がしたことは私のWiFiアダプターの周波数/チャンネルを別のものに設定することでした。私の外部WiFiアダプターはさまざまなチャネルで機能するため、それぞれを変更して、RadioTapヘッダーで確認しました。WiFiインターフェイスのサポートされているチャネルを確認し、特定のチャネルに切り替えるのに役立つ簡単なLinuxコマンド/ツールがあります。

特定の周波数またはチャネルでパケットをキャプチャ/送信するには、インターフェースの現用チャネルを変更し、scapyのスニファー/送信者インターフェースをそのインターフェースに設定する必要があります。

編集-私が直面したその他の問題と解決策:

Linuxを使用していて、インターフェイスのワーキングチャネルを変更する場合は、そのインターフェイスのnetwork-managerを無効にし、これを行う必要があります。最初に次のスニペットを追加します。 /etc/network/interfaces

auto $iface
iface $iface inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

$ifaceインターフェース名に置き換えます。これにより、インターフェースを自分で制御できます。そして、次の行を追加します/etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant

network={
    ssid="Your_AP_SSID"
    psk="Your_Passphrase"
    freq_list=2412 2437 2462
}

2412 2437 2462は、インターフェースが選択する周波数(この場合はチャネル1、6、11)であることに注意してください。必要な頻度に編集できます。ソース。ただし、最初に、インターフェースがこれらの周波数をサポートしていることを確認する必要があります。それを確認するには

iwlist channel

最後にすべてが行われた後。

sendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), iface="wlp3s0")

これにより、wlp3s0設定された頻度でパケットが送信されます。


この答えにいくつかのコードを追加することを気にしますか?
ロスジェイコブス

@ RossJacobs、scapyで共通のsendメソッドを使用するだけで、新しいものはありません。インターフェースを変更する以外は。例としてはsendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), iface="eth1")、インターフェースをサポートする場合は、インターフェースを特定の周波数に設定できます。
ベイビーデスタ

1

この回答は、質問のタイトルと内容を範囲としています。パケットの周波数とチャネルにゲッターとセッターを提供します。

このソリューションでは、WiresharkのSample Captureswpa-Induction.pcapファイルを使用します。

突っつい

ScapyがScapyインタープリターでアクセスできるフィールドを確認するには、1つのパケットをざっと見回すと便利です。

>>> pkts = rdpcap('wpa-Induction.pcap')
>>> pkts[0].summary()
"RadioTap / Dot11FCS / Dot11Beacon / Dot11Elt / Dot11EltRates / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11EltRSN / Dot11Elt / Dot11EltVendorSpecific / Dot11EltMicrosoftWPA / SSID=''"
>>> pkts[0].show()
###[ RadioTap dummy ]###
  version= 0
  pad= 0
  len= 24
  present= Flags+Rate+Channel+Lock_Quality+Antenna+dB_AntSignal+RXFlags
  Flags= FCS
  Rate= 2
  Channel= 2412
  ChannelFlags= CCK+2GHz
  Antenna= 84
  notdecoded= '\x00\x00+\x00\x00\x9fa\xc9\\'

... <output truncated> ...

2412は周波数ではなくチャネルですが、これが必要なデータです。RadioTapはのレイヤーpkts[0].summary()です。それを一緒に入れて、

>>> frequency = pkts[0][RadioTap].Channel
>>> print(frequency)
2412

Scapy チャネルへのアクセス提供しませんが、周波数をチャネルに変換することは簡単です。

それを一緒に入れて

周波数を取得する

ファイルとパケット番号を指定すると、パケットのチャネルと周波数を取得できます。

from scapy.all import RadioTap, rdpcap

def getChannel(frequency):
    base = 2407              # 2.4Ghz
    if frequency//1000 == 5: 
        base = 5000          # 5Ghz
    # 2.4 and 5Ghz channels increment by 5
    return (frequency-base)//5

def getFrequency(file, packet_number):
  pkts = rdpcap(file)
  # Scapy mixes up Channel/Frequency here
  frequency = pkts[packet_number][RadioTap].Channel
  return frequency

freq = getFrequency('wpa-Induction.pcap', 0)
chan = getChannel(freq)
print("Channel: {0} \nFrequency: {1}".format(freq, chan))

周波数の設定

頻度を5300に変更して保存したいとします。これには、パケットリストの反復、すべてのパケットの頻度の変更、結果の保存のみが必要です。scapyインタプリタでは:

>>> for i in range(len(pkts)):
...     pkts[i][RadioTap].Channel = 5300
>>> wrpcap('temp.pcap', pkts)
>>> pkts2 = rdpcap('temp.pcap')
>>> pkts[0].Channel
5300

@Babydesta私は質問を読み、この回答の範囲を特定しました。あなたの同僚にあなたの質問/タイトルがどのように読むかについてのセカンドオピニオンを得るように依頼することもできます。2番目の見出しに重点を置いて、質問方法の形式に従って質問を再質問することができます。これがあなたの質問に答えると思われる場合は、そのようにマークしてください。
ロスジェイコブス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.