9

我想获取 Wifi 热点范围内的所有设备(打开了 wifi)的列表。但是,它可能会或可能不会连接到热点。我通过使用库获取已连接设备的列表,但我不确定是否可以获得未连接到 wifi 热点且仅在其范围内的设备。如果有人能澄清它的可能性,那就太好了。谢谢。

4

6 回答 6

3

获取连接到 Wi-Fi 的所有设备的列表并不难,例如,网络中ping所有可能的主机,然后读取 ARP 缓存表以获取设备的 mac 地址。是一个应用程序。困难的部分是打开 Wi-Fi 的未连接设备,这在一般的 Android 手机上几乎是不可能的(顺便说一句,带有适当无线适配器的 Linux 最适合做这样的事情)但也有一些例外,理论上是你的手机将继续发送探测请求(主动扫描),其中包含 BSSID、SSID(指定已知网络,如果有)和您手机的 MAC 地址,以更新可用的 WiFi 列表以供以后连接,例如,以下是我捕获的探测请求数据包:

Frame 15: 290 bytes on wire (2320 bits), 290 bytes captured (2320 bits)
Radiotap Header v0, Length 25
802.11 radio information
IEEE 802.11 Beacon frame, Flags: ........C
    Type/Subtype: Beacon frame (0x0008)
    Frame Control Field: 0x8000
    .000 0000 0000 0000 = Duration: 0 microseconds
    Receiver address: ff:ff:ff:ff:ff:ff
    Destination address: ff:ff:ff:ff:ff:ff
    Transmitter address: f4:6a:92:23:30:c0
    Source address: f4:ff:92:23:30:c0
    BSS Id: f4:fa:92:23:30:c0
    .... .... .... 0000 = Fragment number: 0
    1010 0011 1101 .... = Sequence number: 2621
    Frame check sequence: 0x7037cad2 [correct]
    [FCS Status: Good]
IEEE 802.11 wireless LAN management frame
    Fixed parameters (12 bytes)
    Tagged parameters (225 bytes)
        Tag: SSID parameter set: someSSID
        Tag: Supported Rates 1(B), 2(B), 5.5(B), 11(B), 6, 9, 12, 18, [Mbit/sec]
        Tag: DS Parameter set: Current Channel: 11
        Tag: Traffic Indication Map (TIM): DTIM 0 of 0 bitmap
        Tag: ERP Information
        Tag: Extended Supported Rates 24, 36, 48, 54, [Mbit/sec]
        Tag: HT Capabilities (802.11n D1.10)
        Tag: HT Information (802.11n D1.10)
        Tag: RSN Information
        Tag: Vendor Specific: 00:50:f2: WPA Information Element
        Tag: Vendor Specific: 00:50:f2: WMM/WME: Parameter Element
        Tag: Vendor Specific: 00:0a:eb
        Tag: Vendor Specific: 00:50:f2: WPS

要捕获这些数据包,您的 WiFi 适配器需要支持监控模式,这在 Android 上很少见,但并非没有,请参阅此项目以了解支持的设备以及如何使用。请注意,为了应对这些隐私侵犯,一些操作系统(Andord 6+、iOS 8+ AFAIK)已经实现了 MAC 地址随机化的不同变体。

于 2017-04-28T03:13:09.480 回答
2

不,这是不可能的,查看未连接设备的唯一方法是进入盒子的管理面板(您只会看到以前连接的设备)。因此,如果您不是该框的管理员,您将无法看到它们。

此外,我建议您看一下nmap 工具来发现网络的所有客户端。您还可以在 Android 上使用Fing,这是一个非常好的工具。

于 2017-04-18T11:02:19.487 回答
0

是的,可以列出 WiFi AP 范围内的 WiFi 设备。我不确定我们如何在 Android 中做到这一点,但您可以查看Aircrack-ng应用程序。您可以列出所有附近的设备,因为每个无线设备都会搜索它们已经连接的 AP,并且当时它们正在提供它们的 MAC 地址(可能是)。看看Aircrack-ng的github 账号对你会有帮助。

于 2017-04-28T10:02:26.287 回答
-1

WifiManager wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVIE);
WifiInfo wInfo = wifiManager.getConnectionInfo();

字符串 macAddress = wInfo.getMacAddress();

于 2017-04-27T10:52:41.580 回答
-1

有可能的。您可以查看 https://github.com/rorist/android-network-discovery

于 2017-04-25T12:10:31.620 回答
-2

请试试这个。

WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wm.startScan();
List<ScanResult> scanResult = wm.getScanResults();
for (ScanResult result : scanResult) 
{
    System.out.println("Access Point MacAddr:" + result.BSSID);         
}
于 2017-04-18T11:01:52.607 回答