繁体   English   中英

借助scapy提取python中的802.11数据帧

[英]Extracting 802.11 data frames in python with the help of scapy

我正在尝试使用 Scapy 分析 a.pcapng 文件。

我有一个无线通信的客户端和服务器的设置。 即客户端正在向服务器发送数据。 我有一个单独的节点,我使用 Wireshark(在监控模式下)捕获客户端和服务器之间的 802.11 流量帧。 我运行wireshark生成的文件叫做short.pcapng

当我尝试使用 Scapy 分析此文件时,问题就开始了。

我写的python代码如下:

import argparse
import os
from time import sleep
import sys
from scapy.utils import RawPcapReader
from scapy.layers.dot11 import *
from scapy.packet import Packet
from scapy.all import *

def process_pcap():
    print('Opening {}...'.format(FILE_NAME))
    for (pkt_data, pkt_metadata,) in RawPcapReader(FILE_NAME):
        dot11_packet = Dot11(pkt_data)
        print(dot11_packet.mysummary)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='PCAP reader')
    parser.add_argument('--pcap', metavar='<pcap file name>',
                        help='pcap file to parse', required=True)
    args = parser.parse_args()
    global FILE_NAME
    FILE_NAME = args.pcap
    if not os.path.isfile(FILE_NAME):
        print('"{}" does not exist'.format(FILE_NAME), file=sys.stderr)
        sys.exit(-1)

    process_pcap()
    sys.exit(0)

我正在运行代码:

PS C:\Users\root\python> python thr.py --pcap short.pcapng

打印出的信息表明 short.pcapng 文件中存在的数据仅包含子类型关联请求的管理帧(而不是我预期的 802.11 数据帧和 802.11 控制帧)。

<bound method Dot11.mysummary of <Dot11  subtype=Association Request type=Management proto=0 FCfield= ID=6144 addr1=6f:00:00:00:cd:27 (RA=DA) addr2=96:03:00:00:00:00 (TA=SA) addr3=10:30:a4:15:40:01 (BSSID/STA) SC=218 |<Dot11AssoReq  cap=CFP+privacy+short-preamble+agility listen_interval=314 |<Dot11Elt  ID=220 len=166 info='22?\xfa\xdc\xa622@E\xb23\xdd\x90' |>>>>
<bound method Dot11.mysummary of <Dot11  subtype=Association Request type=Management proto=0 FCfield= ID=6144 addr1=6f:00:00:00:fc:27 (RA=DA) addr2=96:03:00:00:00:00 (TA=SA) addr3=10:30:a4:15:40:01 (BSSID/STA) SC=190 |<Dot11AssoReq  cap=CFP+PBCC+agility listen_interval=270 |<Dot11Elt  ID=220 len=166 info='22@E\x87\x92\xba0' |>>>>

但是,当我查看 Wireshark 中的 short.pcapng 文件时,它显示了预期的 802.11 数据帧:

wirershark 中的 short.pcapng

这对我来说真的没有意义,因为 Wireshark 显示我有数据帧和控制帧(RTS、CTS),而 Scapy 似乎认为我只有关联请求帧(或管理帧)。 更糟糕的是,在应用过滤器时,我无法在 Wireshark 中找到任何关联请求帧:

wlan.fc.type_subtype == 0x00

Wireshark 和 Scapy 都在读取相同数量的行。 从本质上讲,他们似乎在读取相同的数据,但对它的解释不同。

任何有关正在发生的事情的帮助将不胜感激!

编辑:

在@Carcigenicate 发表评论后,我将打印语句更改为:

    print(dot11_packet.mysummary())

这似乎仍然会生成关联请求,只是格式略有不同:

802.11 Management Association Request a5:03:00:00:00:00 (TA=SA) > 6f:00:00:00:f4:75 (RA=DA)
802.11 Management Association Request a5:03:00:00:00:00 (TA=SA) > 6f:00:00:00:d3:76 (RA=DA)
802.11 Management Association Request a5:03:00:00:00:00 (TA=SA) > 6f:00:00:00:18:77 (RA=DA)
802.11 Management Association Request a5:03:00:00:00:00 (TA=SA) > 6f:00:00:00:46:77 (RA=DA)
802.11 Management Association Request a5:03:00:00:00:00 (TA=SA) > 6f:00:00:00:7c:77 (RA=DA)

这里的问题是您使用的是RawPcapReader ,只有在您完全确定自己在做什么而不确切知道自己在做什么的情况下才应该使用它:-)

没有什么可以保证您正在嗅探的数据包是Dot11 更有可能的是,第一层是RadioTap 尝试

for dot11_packet in PcapReader(FILENAME):
    [...]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM