Подтвердить что ты не робот

Получение уникального идентификатора для маршрутизатора WiFi

Можно ли каким-либо образом получить уникальный идентификатор для конкретного маршрутизатора wifi?

Я пытаюсь написать приложение для Android, которое должно знать, к какому маршрутизатору он подключен. Я знаю, что андроид предоставляет способ получить BSSID в текущей подключенной сети, но, к моему удивлению, это не уникально. Я узнал, что на двухполосных маршрутизаторах два разных устройства могут получать два разных BSSID, даже если они находятся на одном SSID.
Есть ли другой параметр, который я могу получить, который может однозначно идентифицировать Wi-Fi, с которым я подключен? Мне бы хотелось попробовать какую-то стороннюю библиотеку, если бы это позволило мне, так как я вполне уверен, что Android не поставляется в комплекте с лучшим методом, чем дает мне BSSID.

Изменить: я пытаюсь выяснить, кто все установил домашний Wi-Fi (через приложение) как тот же Wi-Fi, что и я. Каждый пользователь устанавливает свой "домашний Wi-Fi", который сохраняется на сервере (адрес mac - это то, что я сохраняю). Затем каждый пользователь может запросить, кто все на Wi-Fi, и если они в настоящее время подключены к этому Wi-Fi или нет. Запрос "кто на моем Wi-Fi" выполняется путем поиска того же MAC-адреса, что и тот, с которым я подключен. Это не удается, если мой дом имеет двойную полосу, так как они могут быть подключены ко второй частоте (и, следовательно, к второму MAC).

4b9b3361

Ответ 1

Вы правы, полагая, что getBSSID() вернет два разных адреса для двух разных диапазонов, поскольку они представляют собой по существу две разные точки доступа: одну 2,4 ГГц и одну 5 ГГц, просто завернутую в тот же пакет. Я написал быстрое приложение, которое получает и отображает все доступные поля, которые могут быть получены с помощью класса WifiInfo. Когда я подключился к диапазону 2,4 ГГц моей точки доступа, детали были следующими:

enter image description here

Обратите внимание, что вы можете сказать, что вы подключены к диапазону 2,4 ГГц ( "Частота: 2452" ). Повторение процесса с полосой 5 ​​ГГц показывает следующее:

enter image description here

Как вы можете видеть, MAC-адреса для двух разных диапазонов отличаются только одним числом; Я не знаю, так ли это для всех маршрутизаторов. Если это действительно так, то вы можете окончательно определить, к какой точке доступа вы подключены, анализируя комбинацию MAC-адреса (BSSID) и частоты.

Ответ 2

К сожалению, нет гарантированного метода однозначной идентификации конкретной точки доступа. Вы можете приблизиться, используя SSID, MAC и т.д., Но это не обязательно будет работать каждый раз, и все равно было бы возможно, чтобы кто-то обманул это, если они пожелали.

Если вы хотите рассмотреть различные интерфейсы WiFi (1) (в отличие от физического устройства, поддерживающего его), то MAC-адрес по определению - то, что вам нужно (запрет неработающих устройств, которые неправильно используют MAC).

(1) Я использую слово "интерфейсы", потому что он может поддерживать несколько сетей (т.е. SSID) на одном и том же интерфейсе. Интерфейс будет эффективно представлять собой один канал на одной частоте.

Ответ 4

Для уникального идентификатора вы можете использовать BSSI + Частота

Пример: - AA: AA: AA: AA: AA: AA + 2432 и AA: AA: AA: AA: AA: AA + 5230 являются уникальными в двухдиапазонном случае

Ответ 5

Вы можете найти MAC-адрес вашего маршрутизатора и использовать его в качестве основы для уникальной идентификации.

Вы можете сделать это, проверив таблицу ARP на Android-устройствах и сравните IP-адрес маршрутизатора, к которому вы подключены. Пример можно показать здесь:

http://www.flattermann.net/2011/02/android-howto-find-the-hardware-mac-address-of-a-remote-host/

Выбран соответствующий код:

/**
 * Try to extract a hardware MAC address from a given IP address using the
 * ARP cache (/proc/net/arp).<br>
 * <br>
 * We assume that the file has this structure:<br>
 * <br>
 * IP address       HW type     Flags       HW address            Mask     Device
 * 192.168.18.11    0x1         0x2         00:04:20:06:55:1a     *        eth0
 * 192.168.18.36    0x1         0x2         00:22:43:ab:2a:5b     *        eth0
 *
 * @param ip
 * @return the MAC from the ARP cache
 */
public static String getMacFromArpCache(String ip) {
    if (ip == null)
        return null;
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        while ((line = br.readLine()) != null) {
            String[] splitted = line.split(" +");
            if (splitted != null && splitted.length >= 4 && ip.equals(splitted[0])) {
                // Basic sanity check
                String mac = splitted[3];
                if (mac.matches("..:..:..:..:..:..")) {
                    return mac;
                } else {
                    return null;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}