go - 如何使用gopacket解析802.11探测请求帧中的信息元素

标签 go wifi gopacket

Gopacket 支持解析信标和探测响应帧中的信息元素,如下所示:

for _, layer := range packet.Layers() {
    if layer.LayerType() == layers.LayerTypeDot11InformationElement {
        dot11info, ok := layer.(*layers.Dot11InformationElement)
        }
}

但是gopacket不支持解析探测请求帧中的信息元素。 我只能用packet.Layer(layers.LayerTypeDot11MgmtProbeReq).(*layers.Dot11MgmtProbeReq) 获取Contents和Payload,信息元素就在这个Contents中。

那么如何解析探测请求帧中的这些信息元素呢?

最佳答案

我相信你必须自己写。您已经尝试过this实现?

解析器如下:

func (pr *capturedRequest) decodeProbeRequestLayer(probeLayer *layers.Dot11MgmtProbeReq) {
    var body []byte
    body = probeLayer.LayerContents()
    for i := uint64(0); i < uint64(len(body)); {
        id := layers.Dot11InformationElementID(body[i])
        i++
        switch id {
        case layers.Dot11InformationElementIDSSID:
            elemLen := uint64(body[i])
            i++
            if elemLen > 0 {
                pr.SSID = string(body[i : i+elemLen])
                i += elemLen
            }
            break
        case layers.Dot11InformationElementIDVendor:
            pr.VendorSpecific = body[i+1:]
            return
        default:
            elemLen := uint64(body[i])
            i += 1 + elemLen
            break
        }
    }
}

关于go - 如何使用gopacket解析802.11探测请求帧中的信息元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59783521/

相关文章:

go - 如何使用 discordgo 获取所有 channel 的列表?

go - 使用 neo4j go 驱动程序编译 neo4j 代码的问题

iOS 将 WIFI 设置传递给蓝牙(BLE)设备?

go - 多次执行例程读取pcap文件不能提高性能吗?

linux - 在 Linux 中安装 vim-go?

go - 如何找到机器可以使用的 ipv6 地址范围(前缀?),以及如何将 ipv6 子网转换为 ip 地址片段?

android - Android 可以做点对点的 ad-hoc 网络吗?

java - 在 Android 应用程序中自动打开 Wifi 热点

go - 在 Windows 64 位上编译 gopacket

go - 如何使用 gopacket 创建和发送 vxlan 数据包?