【问题标题】:How to unpack a packets' wlan layer如何解压数据包的 wlan 层
【发布时间】:2015-05-19 17:12:39
【问题描述】:

所以我得到了当前的原始套接字:

from socket import socket, AF_INET, SOCK_RAW, SOCK_STREAM
from struct import unpack
from binascii import hexlify

rawsocket = socket(AF_INET, SOCK_RAW)
rawsocket.bind(("192.168.2.4", 8000))

while True:
    request = rawsocket.recvfrom(2048)

    #this part is for the sake of the question
    if len(request) is not 0:
        print(request)

    request = ""

如您所见,它在端口8000 上等待192.168.2.4 上的传入数据包。我可以成功到达这个港口。我查看了https://docs.python.org/3.4/library/struct.html 以了解我必须如何理解第一层(wlan),但我不知道该怎么做。

我试过谷歌搜索但没有成功,如果你知道如何解压这一层,你能告诉我你是怎么知道你这样解压的吗?

我知道我必须这样做

    header = request[0][0:x] #But how for must x go for the wlan layer?
    hd = unpack("y", header) #But what fmt must y be? how do I know? 

编辑:

我知道y 必须以! 开头,我也知道x 必须是该层的总字节数:(我的方向是否正确)

【问题讨论】:

  • 基于wildpackets.com/resources/compendium/wireless_lan/wlan_packets 看起来你需要继续阅读直到你得到终端字符(不确定那是什么但它在校验和之后出现)..你不能指望一个固定的数字消息的字节数......但你可以看到它有一个 2byte FC、一个 2byte 持续时间、几个 6 byte 地址和一些序列控制......你可能只需要反复试验......
  • 你的无线网卡在什么模式下?

标签: python sockets struct layer unpack


【解决方案1】:

试试这个

header = request[0][0:14]
hd = unpack("!6s6s2s", header)

dest_addr = hexlify(hd[0])
source_addr = hexlify(hd[1])
type = hexlify(hd[2])

print "destination: {0}".format(dest_addr)
print "source: {0}".format(source_addr)
print "destination: {0}".format(type)

hd 应该是 [Dest Addr, Source Addr, Type/Opcode] 的 3 元素列表

【讨论】:

  • 是的,我已经尝试过了,在另一篇文章中找到了它,但是当我尝试使用 hd = hd[2].decode('UTF-8') 对其进行解码时,它给了我一个无效的起始字节错误。
  • 另外,我认为14应该是30"!6s6s2s"应该是"!2s2s6s6s6s2s6s"看上图。
  • 等待你试图从数据包中提取什么数据?此外,您使用 wifi 卡的模式也很重要,因为它将决定您在哪个层上嗅探数据包。你不是处于监控模式吗?
  • 我正在尝试提取第一层的所有数据。 iph?
  • 我 90% 确定您通过该原始套接字接收的数据包不是 802.11 数据包。我知道您使用的是 wifi 卡,但是当数据包到达您时,我相信它们是以太网数据包,而不是 WLAN 数据包。因此,我将专注于查看以太网数据包格式。我已经用一种打印数据包的方式更新了我的评论。这会产生更好的结果吗?
猜你喜欢
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
相关资源
最近更新 更多