除监听探测请求外,还有哪些方法可以找到802.11无线设备?
我正在写一个Python模块,用来寻找附近的WiFi客户端设备。现在我的扫描器只能监听探测请求,并记录客户端的MAC地址。
我遇到的问题是,我完全依赖设备发送探测请求才能发现它们。
我在想有没有其他方法可以发现设备。参考这个网站作为802.11的指南,我想到了以下几点:
- 发送广播包,使用一些通用的SSID,看看有没有客户端回应。例如,发送一个SSID为'Netgear'的广播,看看有没有已知'Netgear'配置的客户端回应
- 发送断开连接的包,强制已经连接的客户端重新扫描周围的信号
这两个想法我还没有测试过,只是在随便想想。
大家有什么想法吗?
4 个回答
你还可以查看Wi-Fi客户端设备发送给接入点的数据帧和空数据帧。这些来自客户端设备的上行帧在帧控制字段中会显示ToDs=1和FromDs=0。即使客户端设备没有在主动下载数据,大多数设备也会定期发送空数据帧,通常是为了保持连接活跃,或者向接入点发送它当前的省电状态。
我其实正在做同样的事情。从我了解到的情况来看,正如@PerEkman提到的,似乎没有办法从客户端设备那里获取响应。
你第一个想法是设置一个通用的SSID的接入点,这个想法跟一种叫做“误关联”的WiFi黑客手法很相似(还有其他名字)。你可以查看这个链接,了解恶意黑客是如何使用这种技术的。
如果你愿意的话,可以等待附近客户端设备发送的探测请求,然后创建一个SSID与客户端寻找的匹配的接入点。当然,这种方法的一个主要缺点是可能需要和客户端设备一样多的接入点。
你也许可以借鉴这里的一些想法:这个链接。信息有点少,但看起来是说可以向某个频道广播一个去认证的数据包(255.255.255.255),这样在那个频道上的所有客户端都会被迫重新认证他们各自的接入点(假设他们之前是连接的)。然后你就可以等待这些重新认证的请求,从中获取你需要的信息。也许其他人可以确认一下这个说法?
我觉得广播这个想法可能行不通。在802.11网络中,广播流量是没有确认的,所以设备没有理由去回应这种流量。唯一的办法是你要连接到特定的接入点(AP),这样你可以发一个广播的ICMP回显请求或者类似的东西(但你只能收到同一个ESS(扩展服务集)中设备的回应)。
我觉得使用断开连接的数据包的想法也不太可行,因为这个数据包必须发给特定的设备,而你可能并不知道那个设备的地址。
我建议你可以监听所有的流量,记录下你看到的MAC地址。你不需要依赖设备主动探测,但你确实需要依赖它们在某个时候发送一些东西(任何东西)。