使用 WinPCap 如何确定网络适配器是有线的还是无线的?
How can you determine if a network adapter is wired or wireless with WinPCap?
我正在编写一个程序,它使用 winpcap 来捕获我们的交换机发出的一些特定网络流量。
但是,无线设备永远不会收到这些数据包,所以我试图弄清楚如何确定网络适配器是无线的还是有线的(这样我就可以完全跳过无线适配器上的捕获)。
我的第一个想法是检查所选接口的介质(当前根据该适配器的 IP 地址选择 - 逻辑是如果它有 IP 地址,则它已连接)。问题是,pcap_datalink() 会 return DLT_EN10MB,无论是有线还是无线.
下一个想法是尝试 pcap_can_set_rfmon(),如果设备 不能 设置为监控模式(因此是否有线)。但是,当我尝试使用它时似乎出现了 2019 链接错误,这似乎与没有 Airpcap 的 Windows 不支持的功能有关?
我真的不知道还有什么可以尝试,但如果有人有任何指示,那就太好了。我想知道如果我必须开始使用 NDIS 来确定系统上的每个适配器是什么,然后将其与 WinPCap 使用的设备名称相匹配,最终会变得多么困难和复杂。当然这是我可以保留的东西内部 lib/WinPCap?
谢谢!
我有一些解决方案,仅适用于 Windows 系统。
对于我想要 select 的适配器,根据它所连接的网络,我可以将与该适配器关联的 IP 地址与 [=19] 生成的对象中的每个 IP 地址进行比较=]获取适配器信息。如果它们匹配,那么我可以查看同一对象上的 "Type" 是否是以太网。
if ((pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) && (WINVER > _WIN32_WINNT_WS03))
{
}
我也查看了Windows版本;因为只有从 Vista (Winver 6+) 开始,适配器才返回 IF_TYPE_IEEE80211 是无线的。
它不使用 WinPCap,但我又不确定它是否可能。由于我已经在其他地方使用这些 Windows 库,我认为这是我将做出的特定于平台的妥协。希望有一天能对其他人有所帮助!
我正在编写一个程序,它使用 winpcap 来捕获我们的交换机发出的一些特定网络流量。
但是,无线设备永远不会收到这些数据包,所以我试图弄清楚如何确定网络适配器是无线的还是有线的(这样我就可以完全跳过无线适配器上的捕获)。
我的第一个想法是检查所选接口的介质(当前根据该适配器的 IP 地址选择 - 逻辑是如果它有 IP 地址,则它已连接)。问题是,pcap_datalink() 会 return DLT_EN10MB,无论是有线还是无线.
下一个想法是尝试 pcap_can_set_rfmon(),如果设备 不能 设置为监控模式(因此是否有线)。但是,当我尝试使用它时似乎出现了 2019 链接错误,这似乎与没有 Airpcap 的 Windows 不支持的功能有关?
我真的不知道还有什么可以尝试,但如果有人有任何指示,那就太好了。我想知道如果我必须开始使用 NDIS 来确定系统上的每个适配器是什么,然后将其与 WinPCap 使用的设备名称相匹配,最终会变得多么困难和复杂。当然这是我可以保留的东西内部 lib/WinPCap?
谢谢!
我有一些解决方案,仅适用于 Windows 系统。
对于我想要 select 的适配器,根据它所连接的网络,我可以将与该适配器关联的 IP 地址与 [=19] 生成的对象中的每个 IP 地址进行比较=]获取适配器信息。如果它们匹配,那么我可以查看同一对象上的 "Type" 是否是以太网。
if ((pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) && (WINVER > _WIN32_WINNT_WS03))
{
}
我也查看了Windows版本;因为只有从 Vista (Winver 6+) 开始,适配器才返回 IF_TYPE_IEEE80211 是无线的。
它不使用 WinPCap,但我又不确定它是否可能。由于我已经在其他地方使用这些 Windows 库,我认为这是我将做出的特定于平台的妥协。希望有一天能对其他人有所帮助!