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

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

但是gopacket不支持在探测请求帧中解析信息元素。
我只能使用packet.Layer(layers.LayerTypeDot11MgmtProbeReq).(*layers.Dot11MgmtProbeReq)获取目录和有效负载,并且信息元素在此目录中。

那么,如何在探测请求框架中解析这些信息元素?

最佳答案

我相信你必须写自己。您是否已经尝试过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/

10-11 06:54