有什么办法可以获得特定wifi路由器的任何唯一标识符吗?
我正在尝试编写一个Android应用程序,需要知道它连接到哪个路由器 . 我知道android提供了一种获取当前连接网络的BSSID的方法,但令我惊讶的是,这并不是唯一的 .
我发现在双频路由器上,两个不同的设备可能会获得两个不同的BSSID,即使它们位于相同的SSID上 .
我可以获取的任何其他参数可以唯一标识我连接的wifi吗?我很想尝试一些第三方库,如果这样可以允许我,因为我很确定Android没有包装更好的方法而不是给我BSSID .
编辑:我试图找出谁将他们的家庭wifi(通过应用程序)设置为与我相同的Wi-Fi . 每个用户设置他们的“家庭Wi-Fi”,它被保存在服务器上(mac地址是我正在保存的) . 然后,每个用户都可以查询所有用户的Wi-Fi,以及他们当前是否在该Wi-Fi上连接 . “谁在我的wifi上”的查询是通过搜索与我连接的MAC地址相同的MAC地址来完成的 . 如果我的家有双频段,则会失败,因为它们可以连接到第二频率(因此第二个MAC) .
5 回答
假设
getBSSID()
将为两个不同的频段返回两个不同的地址,你是正确的,因为它们本质上是两个不同的接入点,一个2.4GHz和一个5GHz,简单地包装在同一个包中 . 我编写了一个快速应用程序,它可以获取并显示可以使用WifiInfo
类获得的所有可用字段 . 当我连接到接入点的2.4 GHz频段时,详细信息如下:请注意,您可以告诉您已连接到2.4 GHz频段(“频率:2452”) . 使用5 GHz频段重复此过程显示以下内容:
如您所见,两个不同频段的MAC地址仅相差一个数字;我不知道所有路由器是否都是这种情况 . 如果确实如此,那么您可以通过分析MAC地址(BSSID)和频率的组合来最终确定您所连接的接入点 .
遗憾的是,没有保证唯一识别特定接入点的方法 . 您可以通过使用SSID,MAC等来接近,但它不一定每次都能正常工作,如果他们愿意,某人仍然可以欺骗它 .
如果您想考虑不同的WiFi接口(1)(而不是支持它的物理设备),那么根据定义,MAC地址就是您所需要的(除非错误地重复使用MAC的设备损坏) .
(1)我使用“接口”一词,因为它可以支持同一接口上的多个网络(即SSID) . 接口实际上是单个频率的单个信道 .
只需使用AP的MAC地址即可 . (MAC地址是唯一的)
方法如下:Can I find the MAC address of my Access point in Android?
对于唯一标识符,您可以使用BSSI频率
示例: - AA:AA:AA:AA:AA:AA 2432和AA:AA:AA:AA:AA:AA 5230在双频段情况下是独一无二的
您可以找到路由器的Mac地址,并将其用作唯一标识路由器的基础 .
您可以通过检查Android设备ARP表并比较您连接的路由器IP来执行此操作 . 这里可以显示一个例子:
http://www.flattermann.net/2011/02/android-howto-find-the-hardware-mac-address-of-a-remote-host/
提取的相关代码: