Scapy:获取/设置数据包的频率或信道

问题描述 投票:2回答:1

我一直在尝试使用linux捕获WIFI数据包,并查看捕获数据包的频率/通道。我尝试了Wireshark,没有运气,也没有help。尽管使用wireshark的sample packets,但可以看到频率/通道。

所以现在我正在尝试船尾。我想弄清楚嗅探到的数据包的频率/通道,但还是没有运气。有没有办法用鱼钩做这件事。

P.S。如果有比scapy或python更好的工具,我感谢评论

python python-3.x wireshark scapy
1个回答
0
投票

此答案仅限于问题的标题和内容:为数据包的频率和通道提供吸气剂和吸气剂。

对于此解决方案,请使用Wireshark的wpa-Induction.pcap中的Sample Captures文件。

随便看看

在一个数据包周围戳一下,以查看Scapy解释器中Scapy可以访问哪些字段。

>>> 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 does not provide access到通道,但是将频率转换为通道很简单。

放在一起

获取频率

给出文件和数据包编号,我们现在可以获取数据包的频道和频率。

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并保存。这仅需要遍历数据包列表,更改每个数据包的频率并保存结果:

for i in range(len(pkts)):
    pkts[i][RadioTap].Channel = 5300
wrpcap('temp.pcap', pkts)
pkts2 = rdpcap('temp.pcap')
>>> pkts[0].Channel
5300
© www.soinside.com 2019 - 2024. All rights reserved.