利用scapy在python中提取802.11数据帧

2024-06-10 16:09:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个无线通信的客户端和服务器设置。i、 e客户端正在向服务器发送数据。我有一个单独的节点,我使用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数据帧:

short.pcapng in wirershark

这对我来说没有意义,因为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)

Tags: 数据nameimportrequestsapcapmanagementda
1条回答
网友
1楼 · 发布于 2024-06-10 16:09:46

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

没有任何东西可以保证您正在嗅探的数据包是Dot11。更可能的是,第一层是RadioTap。 试一试

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

相关问题 更多 >