Можно ли получить MAC-адрес клиентских устройств, которые находятся в пределах диапазона точек доступа Wi-Fi?

Я хочу получить список всех устройств (у которых включен Wi-Fi), которые находятся в зоне действия точки доступа Wi-Fi. Однако он может или не может быть подключен к точке доступа. Я получаю список подключенных устройств с помощью этой библиотеки, но я не уверен, можно ли получить устройства, которые не подключены к точке доступа Wi-Fi и находятся в пределах ее досягаемости. Было бы очень хорошо, если бы кто-нибудь мог прояснить возможность этого. Спасибо.


person Menu    schedule 18.04.2017    source источник


Ответы (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-адресов.

person jfly    schedule 28.04.2017

Нет не возможно, единственный способ увидеть не подключенные устройства это зайти в панель администрирования бокса (и вы увидите только ранее подключенные устройства). Таким образом, вы не сможете их увидеть, если вы не являетесь администратором на коробке.

Кроме того, я предлагаю вам взглянуть на инструмент nmap, чтобы обнаружить всех клиентов сети. У вас также есть Fing на Android, который довольно хороший инструмент.

person ShellCode    schedule 18.04.2017
comment
Извините, но я хочу программное решение на базе Android. - person Menu; 18.04.2017
comment
Что ж, похоже, у вас уже есть работающая библиотека для подключенных клиентов... Поэтому мне жаль сообщать вам, что то, что вы пытаетесь сделать, невозможно с телефоном Android, взгляните на этот пост: serverfault.com/questions/482825/ - person ShellCode; 18.04.2017
comment
Вы спросили, можно ли обнаружить неподключенные устройства, я ответил вам, что нет. Вам не нужно минусовать только потому, что вы хотели «да»;) - person ShellCode; 18.04.2017
comment
Я был бы рад узнать, что ответ был положительным, но правильный ответ не может заставить меня проголосовать против него. Кто-то другой проголосовал за это :) - person Menu; 18.04.2017
comment
Хорошо, тогда извиняюсь - person ShellCode; 18.04.2017
comment
@ShellCode: Должен быть способ сделать это, учитывая, что мы получаем список доступных точек доступа Wi-Fi на клиентском устройстве, поэтому, чтобы получить ssid точки доступа Wi-Fi, клиентское устройство должно пропинговать его, а в процесс точки доступа Wi-Fi также будет иметь некоторые данные пингующего клиентского устройства. Поправьте меня, если я ошибаюсь. - person Parag Kadam; 21.04.2017
comment
К сожалению, это не так, это однонаправленно! См. en.wikipedia.org/wiki/Beacon_frame для получения дополнительной информации. - person ShellCode; 21.04.2017

Да, можно перечислить WiFi-устройства, находящиеся в радиусе действия WiFi AP. Я не уверен, как мы можем сделать это в Android, но вы можете взглянуть на Приложение Aircrack-ng . Вы можете перечислить все близлежащие устройства, потому что каждое беспроводное устройство ищет свою уже подключенную точку доступа, и в это время они предоставляют свой MAC-адрес (может быть). Вам будет полезно взглянуть на аккаунт github Aircrack-ng.

person Deepak Dixit    schedule 28.04.2017

Это возможно. Вы можете проверить https://github.com/rorist/android-network-discovery.

person Mayur    schedule 25.04.2017
comment
Спасибо за ответ! Эта библиотека почти не документирована, не могли бы вы рассказать, как интегрировать эту библиотеку в проект вместе с некоторым примером кода, как ее использовать, было бы действительно полезно. - person Parag Kadam; 25.04.2017
comment
Библиотека выглядит как старый проект eclipse. Вы можете обновить его до конфигурации maven/gradle и создать файл aar. Имейте в виду, что если проект такой старый, он может не работать. - person Fco P.; 27.04.2017
comment
Это невозможно с использованием вышеуказанной библиотеки. - person vipin agrahari; 28.04.2017

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

Строка macAddress = wInfo.getMacAddress();

person Vijay Bhosale    schedule 27.04.2017
comment
также добавьте ‹uses-permission android:name=android.permission.ACCESS_WIFI_STATE/› - person Vijay Bhosale; 27.04.2017

Пожалуйста, попробуйте это.

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);         
}
person Ganpat Kaliya    schedule 18.04.2017
comment
Пожалуйста, прочитайте вопрос правильно. В нем говорится, что нужно получить список устройств в зоне действия точки доступа, а не список доступных Wi-Fi в пределах досягаемости. - person Menu; 18.04.2017