Я хочу получить список всех устройств (у которых включен Wi-Fi), которые находятся в зоне действия точки доступа Wi-Fi. Однако он может или не может быть подключен к точке доступа. Я получаю список подключенных устройств с помощью этой библиотеки, но я не уверен, можно ли получить устройства, которые не подключены к точке доступа Wi-Fi и находятся в пределах ее досягаемости. Было бы очень хорошо, если бы кто-нибудь мог прояснить возможность этого. Спасибо.
Можно ли получить MAC-адрес клиентских устройств, которые находятся в пределах диапазона точек доступа Wi-Fi?
Ответы (6)
Нетрудно получить список всех устройств, которые подключены к 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-адресов.
Нет не возможно, единственный способ увидеть не подключенные устройства это зайти в панель администрирования бокса (и вы увидите только ранее подключенные устройства). Таким образом, вы не сможете их увидеть, если вы не являетесь администратором на коробке.
Кроме того, я предлагаю вам взглянуть на инструмент nmap, чтобы обнаружить всех клиентов сети. У вас также есть Fing на Android, который довольно хороший инструмент.
Да, можно перечислить WiFi-устройства, находящиеся в радиусе действия WiFi AP. Я не уверен, как мы можем сделать это в Android, но вы можете взглянуть на Приложение Aircrack-ng . Вы можете перечислить все близлежащие устройства, потому что каждое беспроводное устройство ищет свою уже подключенную точку доступа, и в это время они предоставляют свой MAC-адрес (может быть). Вам будет полезно взглянуть на аккаунт github Aircrack-ng.
Это возможно. Вы можете проверить https://github.com/rorist/android-network-discovery.
WifiManager wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVIE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
Строка macAddress = wInfo.getMacAddress();
Пожалуйста, попробуйте это.
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);
}