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/