我有一个 AHK 脚本,我需要获取有关特定网络接口的各种信息。为此,我对GetAdaptersAddresses函数的 IPHlpAPI 库进行了 dll 调用,该函数在我提供的地址处返回一个IP_ADAPTER_ADDRESSES结构。然后我开始读取该地址的内存并解码结构的每个成员。
例如,对于IP_ADAPTER_INFO结构,如果我读取前 4 个字节,我会得到下一个结构开始的地址。然后,如果我读取接下来的 4 个字节,我会得到 ComboIndex 值。然后,如果我读取接下来的 260 个字节并将其转换为 ANSI 字符串,我会得到适配器的名称。等等。到目前为止,这很有效。
但是对于 IP_ADAPTER_ADDRESSES 结构,它似乎不起作用。我试过这个:我跳过了前 8 个字节,作为对齐,然后我跳过了接下来的 4 个字节作为结构的长度,然后我读取了接下来应该是适配器索引的 4 个字节。但是这个数字是随机的大数字,它不对应任何适配器。其余数据也没有,除非我将内存的每个字节转换为 ANSI 字符,然后您可以看到 AdapterName、Description 和 FriendlyName。
实际上,我想要的只是 FriendlyName,因为我已经从 IP_ADAPTER_INFO 结构中获得了其余信息。那么我可以在 IP_ADAPTER_ADDRESSES 结构中的哪个地址找到 FriendlyName 呢?
我还在 pastebin 上发布了我得到的内存内容:
IP_ADAPTER_ADDRESSES 结构 - HEX
IP_ADAPTER_ADDRESSES 结构 - ANSI