Как найти беспроводную точку в сети

Чтобы сделать собственное уникальное устройство для «умного дома» сейчас достаточно купить микроконтроллер и электронные компоненты. Конечно, на рынке уже есть множество «умных» устройств, но не все производители предоставляют открытое API, и уж точно единицы разрешают (или по крайней мере не запрещают) создавать собственные прошивки. Иногда наступает тот момент, когда кажется, что разработать и запрограммировать собственное устройство будет лучшим решением.

В этой статье я расскажу про несколько способов «‎научить» микроконтроллер распознавать присутствие людей дома исключительно с помощью Wi-Fi.

Предисловие

Источник изображения
Мне с детства нравились часы. Конечно, желания заполнить всю комнату звенящими часами, словно Доктор Браун, у меня не было, но часов в моей комнате было достаточно. Тем не менее, пришлось повзрослеть и желание иметь множество часов как-то приутихло.

Наступила взрослая самостоятельная жизнь и вопрос с часами стал одним из маленьких конфликтов интересов. Мне хотелось иметь светящиеся часы, которые ненавязчиво покажут время в любое время дня и ночи. Моя девушка же придерживается мнения, что никакой свет, даже слабый, не должен препятствовать засыпанию.

Компромисс находился простой: в процессе подготовки ко сну выключать часы. Правда, их нужно с утра как-то включить, что в свою очередь нерационально: проще взять телефон, там время тоже есть. Значит, нужно как-то автоматически определять моменты, подходящие для отключения и включения часов.

Быстро проанализировав подготовку ко сну, я обнаружил там повторяющееся действие, а именно, отключение Wi-Fi на телефоне. Такой триггер позволит «умным» часам выключаться не по сухому «расписанию», а в нужные моменты времени.

Давайте определимся, из чего состоят часы и какие ограничения накладываются на окружение.

Что там внутри

Подключение платы к светодиодной матрице (источник alexgyver.ru)

Набор юного «самодельщика» прост:

  • плата Wemos D1 Mini на базе чипа ESP8266 с Wi-Fi;
  • светодиодная WS2812B-совместимая матрица размером 32х8;
  • блок питания 5В, 2А;
  • для разработки прошивки используется Arduino IDE.

Разумеется, полагаться на внутренние часы микроконтроллера неразумно и нужна отдельная плата часов реального времени. Однако, согласно любительскому исследованию, скорость расхождения внутреннего времени микроконтроллера составляет примерно одну секунду в день. Это не критично для настенных часов, а при наличии доступа в интернет, синхронизация с сервером времени решит проблему.

Минимальные вложения для сборки данного устройства накладывают следующие ограничения:

  • в домашней сети отсутствуют какие-либо системы, выполняющие мониторинг сети;
  • допустимы изменения в конфигурации домашнего роутера;
  • допустимы изменения в конфигурации сетевого подключения на телефоне;
  • модификация ПО домашнего роутера запрещена;
  • модификация ПО телефона запрещена.

Под модификацией ПО подразумевается создание собственных программных решений, которые по событиям в операционной системе телефона могут отправить команду. Во-первых это «‎не спортивно»‎, а во-вторых потребует кроссплатформенной разработки, если захочется включить в поддержку чей-то iPhone, а потом и пару ноутбуков с разными операционными системами.

Современные устройства умеют подменять MAC-адрес во имя конфиденциальности
Единственный уникальный идентификатор, с помощью которого можно найти телефон в домашней сети — MAC-адрес. Однако, современная техника умеет генерировать «подставной» MAC-адрес, что усложняет определение устройства. Тем не менее, для заданных Wi-Fi-сетей эту опцию можно отключить.

Итак, у нас есть MAC-адрес, что будем делать?

Поиск устройства


Можно придумать несколько вариантов в зависимости от искомого устройства и используемого маршрутизатора/точки доступа.

Большую часть решений объединяет одно: подключение к домашнему Wi-Fi. Минимальный код, с которым будем работать.

#include <ESP8266WiFi.h>
#include <WiFiManager.h>

void setup() {
  Serial.begin(115200);

  WiFiManager wifiManager;
  wifiManager.setDebugOutput(false);
  wifiManager.autoConnect("habr-example", "supergeneral");
  Serial.print("Connected! IP address: ");
  Serial.println(WiFi.localIP());

  /* Здесь также инициализация для FastLED и других библиотек,
   * которые не важны для данного примера 
   **/ 
}

void loop() {
  // Основной код
  ledTick();
}

Для упрощения работы с Wi-Fi используется библиотека WiFiManager. Если в памяти микроконтроллера нет информации о известных точках или они недоступны, WiFiManager запустит собственную точку доступа с веб-интерфейсом для быстрого подключения к новому Wi-Fi.

Кто там


Самое простое решение всегда на поверхности: давайте «пинганем» телефон. На поверку, в мире микроконтроллеров протокол ICMP используется неохотно. Так, в lwIP (lightweight IP, реализации стека TCP/IP для встраиваемых систем) есть минимальная поддержка протокола ICMP, но этого недостаточно. Для наших целей придется поставить библиотеку ESP8266-ping.

Для уведомления об успешном или неуспешном пинге библиотека использует функции обратного вызова. Напишем функцию с простой логикой:

  • если устройство было недоступно, а сейчас доступно — устройство появилось в сети;
  • если устройство недоступно MAX_PING попыток подряд — устройство ушло из сети.

#define MAX_PING 5

boolean current_state = false;
unsigned char attempts = 0;

void* responseCallback(const PingerResponse& response) {
  if(response.ReceivedResponse) {
    if(current_state == false) {
      attempts = 0;
      current_state = true;
      Serial.println("Device on");
    }
  } else {
    if(current_state == true) {
      attempts++;
      if(attempts > MAX_PING) {
        current_state = false;
        Serial.println("Device off");
      }
    }
  }
  return (void*)true;
}

Инициализируем библиотеку ESP8266-ping:

#define PING_INTERVAL 1000

Pinger pinger;

void setup() {
  // Общая инициализация опущена

  pinger.OnReceive(&responseCallback);
}

Так как пинг — не единственная наша задача, создаем функцию, которая раз в PING_INTERVAL миллисекунд отправляет ICMP-пакет.

unsigned long previousTime = 0;
void pingTick() {
  if(millis() - previousTime > PING_INTERVAL) {
    previousTime = millis();
    pinger.Ping("192.168.88.148", 1, PING_INTERVAL / 2);
  }
}

void loop() {
  // Другие Tick() функции опущены
  pingTick();
}

Полный исходный текст

#include <ESP8266WiFi.h>
#include <WiFiManager.h>

#include <Pinger.h>

#define MAX_PING 5
#define PING_INTERVAL 1000

Pinger pinger;
boolean current_state = false;
unsigned char attempts = 0;

void* responseCallback(const PingerResponse& response) {
  if(response.ReceivedResponse) {
    if(current_state == false) {
      attempts = 0;
      current_state = true;
      Serial.println("Device on");
    }
  } else {
    if(current_state == true) {
      attempts++;
      if(attempts > MAX_PING) {
        current_state = false;
        Serial.println("Device off");
      }
    }
  }
  return (void*)true;
}

unsigned long previousTime = 0;
void pingTick() {
  if(millis() - previousTime > PING_INTERVAL) {
    previousTime = millis();
    pinger.Ping("192.168.88.148", 1, 1000);
  }
}

void setup() {
  Serial.begin(115200);

  WiFiManager wifiManager;
  wifiManager.setDebugOutput(false);
  wifiManager.autoConnect("habr-example", "supergeneral");
  Serial.print("Connected! IP address: ");
  Serial.println(WiFi.localIP());

  pinger.OnReceive(&responseCallback);
}

void loop() {
  pingTick();
}

Третий аргумент функции Ping задает время ожидания ответа и ему стоит быть меньше, чем промежутки между пингами. Однако, здесь фигурирует только IP-адрес, еще и явно прописанный в прошивке. Есть два решения данной ситуации:

  1. в настройках DHCP-сервера явно «прибить» адрес к MAC-адресу искомого устройства;
  2. пинговать все адреса подсети и проверять MAC-адрес.

При условии, что часы — это домашнее устройство, а домашнюю сеть и телефоны не меняют пять раз на дню, то первое решение выглядит достойно. При этом время реакции часов на выход устройства из сети — MAX_PING * PING_INTERVAL миллисекунд.

Но случаются вредные устройства, которые не отвечают на ICMP-запросы.

Открывайте! Мы знаем, что вы тут


Далеко за примером ходить не надо: операционная система Microsoft Windows по умолчанию игнорирует ICMP-запросы. Такой расклад дел не сильно усложняет жизнь. Устройство может игнорировать ICMP-запросы, но ARP-запросы ему проигнорировать не получится. Поэтому для «особо вредных» устройств у нас более хитрый план: очищаем ARP-таблицу, отправляем несколько пингов, проверяем ARP-таблицу.

ARP (англ. Address Resolution Protocol — протокол определения адреса) — протокол в компьютерных сетях, предназначенный для определения MAC-адреса по IP-адресу другого компьютера. © Википедия

Особенность ARP-протокола заключается в том, что он работает только в пределах одного Ethernet-сегмента. Тем не менее, ожидается, что домашняя сеть не должна быть сложной.

Доступ к ARP-таблицам на ESP8266 возможен через функции lwIP. Эти функции — для смелых и простым смертным не нужны, поэтому примеров и объяснений достаточно мало, нужно читать еще и комментарии к коду. Добавляем в проект включение заголовочных файлов lwip:

#include <lwip/etharp.h>

Удаляем функцию обратного вызова и изменяем pingTick() следующим образом:

void pingTick() {
  if(millis() - previousTime > PING_INTERVAL) {
    previousTime = millis();

    // IP-адрес искомого устройства, может быть глобальным
    IPAddress addr = IPAddress(192,168,88,148);

    // Итерация по ARP-таблице
    ip4_addr_t *ip;
    struct netif *netif;
    struct eth_addr *ethaddr;
    bool found = false;
    for(int i=0; i<ARP_TABLE_SIZE; i++) {
      if (etharp_get_entry(i, &ip, &netif, &ethaddr)) {
        if(addr[0] == (ip->addr & 0xFF) &&
           addr[1] == (ip->addr >> 8 & 0xFF) &&
           addr[2] == (ip->addr >> 16 & 0xFF) &&
           addr[3] == (ip->addr >> 24 & 0xFF)) {
          found = true;
        }
      }
    }

    // Очищаем ARP-таблицу 
    etharp_cleanup_netif(netif);
    
    // Запускаем следующий раунд пингов
    pinger.Ping(addr, 5, 100);

    // Обрабатываем информацию
    if(found) {
      Serial.println("Device on");
    } else {
      Serial.println("Device off");
    }
  }
}

Время реакции этого способа равно PING_INTERVAL, в моем случае я увеличил это число до пяти секунд. Способ потенциально хороший, но в тестах в моей домашней сети он постоянно сбоил и способ с ICMP-ответами работал стабильнее. Поэтому если ваше устройство не скупится отвечать на пинг, то лучше использовать предыдущий способ.

Полный исходный код

#include <ESP8266WiFi.h>
#include <WiFiManager.h>

#include <Pinger.h>
#include <lwip/etharp.h>

#define MAX_PING 5
#define PING_INTERVAL 5000

Pinger pinger;
boolean current_state = false;
unsigned char attempts = 0;

unsigned long previousTime = 0;
void pingTick() {
  if(millis() - previousTime > PING_INTERVAL) {
    previousTime = millis();

    // IP-адрес искомого устройства, может быть глобальным
    IPAddress addr = IPAddress(192,168,88,148);

    // Итерация по ARP-таблице
    ip4_addr_t *ip;
    struct netif *netif;
    struct eth_addr *ethaddr;
    bool found = false;
    for(int i=0; i<ARP_TABLE_SIZE; i++) {
      if (etharp_get_entry(i, &ip, &netif, &ethaddr)) {
        if(addr[0] == (ip->addr & 0xFF) &&
           addr[1] == (ip->addr >> 8 & 0xFF) &&
           addr[2] == (ip->addr >> 16 & 0xFF) &&
           addr[3] == (ip->addr >> 24 & 0xFF)) {
          found = true;
        }
      }
    }

    // Очищаем ARP-таблицу 
    etharp_cleanup_netif(netif);
    
    // Запускаем следующий раунд пингов
    pinger.Ping(addr, 5, PING_INTERVAL / 10);

    // Обрабатываем информацию
    if(found) {
      if(current_state == false) {
        current_state = true;
        Serial.println("Device on");
      }
    } else {
      if(current_state == true) {
        current_state = false;
        Serial.println("Device off");
      }
    }
  }
}

void setup() {
  Serial.begin(115200);

  WiFiManager wifiManager;
  wifiManager.setDebugOutput(false);
  wifiManager.autoConnect("habr-example", "supergeneral");
  Serial.print("Connected! IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  pingTick();
}

Но что делать, если эти варианты по каким-то причинам не подходят?

Чуткий нюх


Микроконтроллер на базе ESP8266 может быть Wi-Fi-сниффером. У него можно включить неразборчивый режим (promiscuous mode) и собирать пролетающие мимо пакеты. Существует несколько репозиториев, в которых есть код запускающий сниффер на вашем ESP8266.

Телефоны с включенным Wi-Fi будут постоянно рассылать разные пакеты, и часть из них не будет иметь шифрования. Таким образом, можно определять наличие или отсутствие телефона в сети.

Несмотря на то, что способ надежный как швейцарские часы,

у данного решения есть ряд проблем:

  • если рядом множество Wi-Fi сетей, то поток пакетов будет большим, что потребует самодельного фильтра. Возможно этот фильтр будет медленнее, чем в lwIP.
  • В этом режиме ESP8266 не имеет доступа в интернет, так как не подключена к Wi-Fi. Если вы хотели добавить погоду или синхронизацию с NTP — это будет затруднительно.
  • Микроконтроллер может «не услышать» пакет от вашего устройства в силу физических причин, а так как пакет не предназначался микроконтроллеру, повторения не будет.
  • Сниффер может не понравиться соседям, их друзьям или местным законам.

Но существует более простой, надежный и быстрый способ получения информации о подключенных устройствах.

Уведомления


Этот способ требует соответствующего сетевого оборудования. Если у ваш домашний роутер работает на OpenWRT или RouterOS, то он точно подойдет.

Данный способ построен на парсинге логов маршрутизатора. Маршрутизатор всегда знает MAC-адрес подключившегося и в большинстве случаев выдает адрес с помощью DHCP-сервера. Поэтому, логи маршрутизатора — это самый быстрый и самый надежный способ.

Для моего Mikrotik hAP ac lite лог подключения и отключения выглядит следующим образом. MAC-адреса вымышлены.

wireless,info 80:35:XX:XX:XX:XX@wlan2: disconnected, received deauth: sending station leaving (3)
wireless,info 80:35:XX:XX:XX:X@wlan2: connected, signal strength -44

Настраиваем логирование по метке wireless,info в удаленный порт. Для ускорения обработки на микроконтроллере задействуем протокол UDP. Настраиваем UDP-сервер следующим образом:

#include <WiFiUdp.h>

WiFiUDP syslog;
void setup() {
  // Общая инициализация опущена

  syslog.begin(514);
}

Далее периодически опрашиваем UDP-сервер на предмет пришедших пакетов.

#define BUF_SIZE 4096
char str[BUF_SIZE];
String masterMac = "80:35:XX:XX:XX:XX";
void syslogTick() {
  int packetSize = syslog.parsePacket();
  if(packetSize > 0) {
    int n = syslog.read(str, BUF_SIZE);
    str[n] = '';

    String syslog_str = String(str);
    String mac = syslog_str.substring(14, 31);
    String reason = syslog_str.substring(39);
    
    bool connected = true;
    if(reason.startsWith("disconnected")) {
      connected = false;
    }

    if(mac != masterMac) {
      return;
    }

    if(connected) {
      Serial.println("Device connected!");
    } else {
      Serial.println("Device disconnected!");
    }
  }
}

Пакет содержит MAC-адрес и причину события. Достаточно «‎разобрать»‎ пришедшую строку и записать состояние.

Этот способ, конечно, тоже обладает недостатком. Так, при перезагрузке микроконтроллера, потребуется узнать текущее состояние искомого устройства. Но для этого можно использовать способ с ICMP-запросом.

Полный исходный код

#include <ESP8266WiFi.h>
#include <WiFiManager.h>

#include <WiFiUdp.h>

WiFiUDP syslog;
void setup() {
Serial.begin(115200);

WiFiManager wifiManager;
wifiManager.setDebugOutput(false);
wifiManager.autoConnect(«habr-example», «supergeneral»);
Serial.print(«Connected! IP address: „);
Serial.println(WiFi.localIP());

syslog.begin(514);
}

#define BUF_SIZE 4096
char str[BUF_SIZE];
String masterMac = “80:35:XX:XX:XX:XX»;
void syslogTick() {
int packetSize = syslog.parsePacket();
if(packetSize > 0) {
int n = syslog.read(str, BUF_SIZE);
str[n] = ”;
String syslog_str = String(str);
String mac = syslog_str.substring(14, 31);
String reason = syslog_str.substring(39);

bool connected = true;
if(reason.startsWith(«disconnected»)) {
connected = false;
}

if(connected) {
Serial.println(«Device connected!»);
} else {
Serial.println(«Device disconnected!»);
}
}
}

void loop() {
syslogTick();
}

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

А вы создавали собственные умные устройства?


43.24%
Да, пробовал, получилось
48


11.71%
Да, пытался, но вышла фигня
13


32.43%
Нет, не пробовал, но хотел бы
36


12.61%
Нет и не собираюсь
14

Проголосовали 111 пользователей.

Воздержались 19 пользователей.

Если, например, вы подозреваете соседа в подключении к вашей Wi-Fi сети и не можете удостовериться в своих догадках, приведенная техника может помочь в сборе доказательств.

Автор: Kody

Если вы когда-либо задумывались об отслеживании источника передачи Wi-Fi сигнала, то эта задача решается относительно просто при использовании правильного оборудования.

Например, при помощи направленной Wi-Fi антенны и Wireshark мы можем создать экранный фильтр для любого целевого устройства, находящегося в доступном диапазоне, с целью построения графика мощности сигнала. Перемещая антенну в разные стороны, мы легко можем обнаружить направление, откуда приходит сигнал, наблюдая за пиками мощности на графике.

Зачем искать Wi-Fi сигнал

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

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

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

При использовании этого подхода возникает проблема, связанная с ненаправленной антенной, у которой диаграмма направленности похожа на пончик. Этот паттерн позволяет прекрасно принимать сигнал от близлежащей сети практически в любом направлении, но не позволяет найти точное направление, откуда исходит этот сигнал.

Альтернативный вариант: использование антенны с узкой диаграммой направленности, например, Яги, панельную или в виде параболической решетки. В отличие от диаграммы в виде пончика, направленная антенна получает более сильный сигнал при наведении на цель.

Использование Wireshark для отслеживания сигналов

Когда встает задача визуализации мощности сигнала в наглядной форме с целью отслеживания подозрительных устройств, Wireshark приходится очень кстати, поскольку умеет отображать силу передаваемого сигнала от всех близлежащих Wi-Fi девайсов, которые мы укажем.

Хотя эта функция не очень хорошо задокументирована, процесс идентификации целевого устройства и отображение мощности сигнала в графическом виде на удивление прост. В связке с сетевым адаптером в режиме мониторинга и Wi-Fi антенной с узкой диаграммой направленности Wireshark сможет быстро обнаружить местонахождение любого Wi-Fi устройства, находящегося в доступном радиусе обзора.

Процесс поиска сигналов в Wireshark организован примерно следующим образом. Сначала мы переводим сетевой адаптер в режим мониторинга (monitor mode) и начинаем сканировать цели при помощи airodumpng с целью обнаружения канала, в котором находится искомое устройство. Как только соответствующий канал, откуда вещает наша цель, обнаружен, можно переходить к сканированию конкретного канала для получения пакетов и отображения полученной информации в графическом виде.

После закрепления в нужном канале мы можем открыть Wireshark, найти пакеты от устройства, которое хотим отслеживать, а затем создать экранный фильтр, чтобы отображались только пакеты, передаваемые от нужного девайса. В завершении процесса мы при помощи графика, на котором отображена мощность сигнала в зависимости от времени, во время перемещения направленной антенны, пытаемся найти всплески.

Что понадобится

Чтобы следовать данному руководству вам потребуется компьютер, на котором можно запустить Wireshark и перевести сетевой адаптер в режим мониторинга, что доступно в любой системе на базе дистрибутива Kali / Debian или на виртуальной машине в macOS или Windows.

Также вам понадобится внешний сетевой Wi-Fi адаптер с поддержкой режима мониторинга. Я рекомендую модель навроде AWUS036NEH. Если вы ищете что-то более надежное, то модель Alfa Tube-UN защищена от влаги и предназначена для использования на улице. Наконец, вам понадобится направленная Wi-Fi антенна, как, например, панельная антенна. Также подойдет антенна Яги, параболическая решетка или антенна-банка, если вы хотите смастерить собственную направленную антенну.

Шаг 1. Переключение карты в режим мониторинга

Для начала подключите беспроводной сетевой адаптер к вашей системе с Kali или Debian, а затем при помощи команды ifconfig выясните имя карты. Должно быть имя вроде «wlan1». Если не отображается, запустите команду ip a, чтобы убедить, что нужный интерфейс поднят.

Если ваша карта отображается при запуске команды ip a, но не отображается при запуске команды ifconfig, выполните команду ifconfig wlan1 up. Теперь карта должна отображаться и при запуске команды ifconfig.

Теперь переведите карту в режим мониторинга при помощи команды ниже. Предполагается, что имя вашего адаптера – «wlan1», и интерфейс поднят.

~# airmon-ng start wlan1

Found 3 processes that could cause trouble.
Kill them using 'airmon-ng check kill' before putting
the card in monitor mode, they will interfere by changing channels
and sometimes putting the interface back in managed mode

  PID Name
  538 NetworkManager
  608 wpa_supplicant
 2446 dhclient

PHY Interface   Driver      Chipset

phy0    wlan0       ath9k       Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter (rev 01)
phy4    wlan1       rt2800usb   Ralink Technology, Corp. RT5372

        (mac80211 monitor mode vif enabled for [phy4]wlan1 on [phy4]wlan1mon)
        (mac80211 station mode vif disabled for [phy4]wlan1)

После переключения в режим мониторинга имя вашей карты должно поменяться на «wlan1mon». При помощи беспроводного сетевого адаптера в режиме мониторинга мы можем начать прослушивание Wi-Fi трафика, запустив следующую команду:

~# airodump-ng wlan1mon

Шаг 2. Идентификация цели и широковещательного канала

В предыдущем шаге мы начали прослушивать трафика при помощи следующей команды:

~# airodump-ng wlan1mon

Теперь мы должны увидеть список близлежащих сетей, каждая из которых является нашей потенциальной целью:

CH 10 ][ Elapsed: 0 s ][ 2019-08-04 03:33

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 CC:40:D0:6C:73:D1  -40        2        0    0   8  195  WPA2 CCMP   PSK  SuicideGirls
 C0:8A:DE:B9:CD:D8  -50        2        0    0   1  130  OPN              SpectrumWiFi
 C0:8A:DE:79:CD:D8  -50        2        0    0   1  130  WPA2 CCMP   MGT  SpectrumWiFi Plus
 C0:8A:DE:39:CD:D8  -49        2        0    0   1  130  OPN              CableWiFi
 00:9C:02:D2:5E:B9  -65        2        0    0   1  54e. WPA2 CCMP   PSK  HP-Print-B9-Officejet Pro 8600
 88:96:4E:50:FF:40  -45        3        0    0   1  195  WPA2 CCMP   PSK  ATTMfRfcmS
 78:96:84:00:B5:B0  -48        2        0    0   1  130  WPA2 CCMP   PSK  The Daily Planet

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 C0:8A:DE:79:CD:D8  4A:F3:2A:2A:4E:E6  -68    0 - 1      0        2

Нажмите Ctrl-C для остановки перехвата, когда целевая сеть будет найдена. Теперь нужно определить канал, где находится сеть, которую мы хотим отслеживать. В логе выше показано несколько сетей. Предположим, что мы хотим отслеживать сеть с SSID «ATTMfRfcmS».

Если мы хотим получить приблизительное представление, где ранее была видна сеть, то можно ввести BSSID на сайте Wigle.net и посмотреть результаты предыдущих наблюдений. Из рисунка ниже видно, что наша цель наблюдалась дважды.

Рисунок 1: Местонахождение целевой беспроводной сети

Самая важная информация, получаемая после запуска airodump-ng, – номер канала, в котором передает наша цель. Теперь мы знаем, что вещание происходит в канале 1. Перезапускаем airodump-ng с целью сканирования только этого канала.

Шаг 3. Прослушивание конкретного канала и запуск Wireshark

В терминале вновь запускаем команду airodump-ng, но в этот раз добавляем флаг c с номером целевого канала. В случае с каналом 1 команда будет выглядеть так:

# airodump-ng wlan1mon -c 1

Указать канал чрезвычайно важно, поскольку Wireshark не умеет управлять беспроводной картой самостоятельно, и нам нужно запустить airodump-ng с целью подключения к корректному каналу и избежания потери пакетов во время сканирования не того канала.

Как только airodump-ng начал работать в конкретном канале (в нашем случае в канале 1), настало время запустить Wireshark. После открытия Wireshark выберите карту «wlan1mon», находящуюся в режиме мониторинга, в качестве источника перехвата, а затем кликните на иконку с синим акульим плавником в левом верхнем углу экрана с целью начала перехвата пакетов на канале 1.

Рисунок 2: Выбор карты для перехвата пакетов

Теперь вы должны увидеть множество пакетов, перехватываемых Wireshark! Следующая задача – найти пакет от целевого устройства, который будет использоваться для создания экранного фильтра.

Шаг 4. Обнаружение цели и создание экранного фильтра

Когда у нас появился набор пакетов, можно поискать сигнальные кадры (beacon frame) с именем целевой сети. После клика на кадре, кликните на стрелку рядом с надписью «IEEE 802.11» и обратите внимание на поля «Transmitter address» или «Source address», на основе которых мы будем создавать экранный с целью отслеживания только целевого устройства.

Рисунок 3: Содержимое одного из сигнальных кадров целевой сети

Кликните правой кнопкой мыши на поле «Transmitter address», выберите «Apply as filter», а затем «Selected» для создания экранного фильтра, который будет показывать только пакеты, передаваемые от устройства с указанным BSSID. Будут показаны все передаваемые пакеты из интересующей нас сети.

Рисунок 4: Создание экранного фильтра

На панели фильтров должен появиться новый фильтр, выглядящий примерно так «wlan.ta ==» с BSSID целевого беспроводного устройство. Логика этого фильтра простая: «показать только пакеты с адресом передачи, совпадающим с указанным».

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

Шаг 5. Графическое отображение мощности отфильтрованного сигнала

Чтобы отобразить мощность сигнала в виде графика, скопируйте созданный экранный фильтр, кликните на «Statistics», а затем «I/O Graph» для открытия окна с графиком. Кликните на иконку с плюсом (+) с целью создания нового графика и снимите флажок со всех остальных графиков, которые могут быть включены.

Укажите имя графика (нечто легко запоминаемое), и затем вставьте скопированный ранее экранный фильтр в поле Display Filter. Далее вставьте wlan_radio.signal_dbm в поле Y Field и выберите «AVG(Y Field)» в качестве оси Y (Y Axis). Наконец, установите стиль (Style) «Line» и в поле SMA Period укажите «10 Interval SMA».

После всех настроек график должен выглядеть, как показано на рисунке ниже, и мощность сигнала должна начать отображаться.

Рисунок 5: График мощности сигнала с отслеживаемого устройства

Этот график изображает среднюю мощность сигнала, исходящего от целевого устройства, в зависимости от времени. Пока не перемещайте направленную антенну и дайте графику отрисоваться в течение некоторого времени, чтобы понять усредненный уровень. Сначала может показаться, что сигнал сильно меняется, поскольку Wireshark фиксирует даже небольшие изменения, однако этот график будет более полезным, когда мы начнем ходить внутри помещения и встречать более сильные и более слабые сигналы, которые будут растягивать средние значения графика.

Шаг 6. Перемещение антенны для поиска пиков сигнала

Настал момент истины. Медленно поворачивайте направленную антенну на 360 градусов и смотрите за пиками мощности сигнала, которые помогают определить направление, откуда идет передача.

На графике ниже показан большой всплеск, появившийся в процессе медленного поворачивания панельной антенны после совмещения с направлением источника сигнала.

Рисунок 6: Всплеск мощности сигнала после совмещения направленной антенны с источником

После поворота туда-обратно несколько раз вы должны увидеть пики сигнала. Проследуйте в направлении, где был обнаружен всплеск и еще раз поверните антенну, чтобы сузить предположительное местонахождение источника передачи.

Заключение

Всякий раз, когда сеть Wi-Fi появляется в неположенном месте, или устройство начинает подключаться к вашей беспроводной сети без разрешения, Wireshark и сетевой адаптер могут помочь в обнаружении источника сигнала. Эта методика позволяет относительно легко обнаружить вредоносную скрытую точку доступа или деятеля, пытающегося подключиться к вашей беспроводной сети без разрешения. Если, например, вы подозреваете соседа в подключении к вашей Wi-Fi сети и не можете удостовериться в своих догадках, приведенная техника может помочь в сборе доказательств.

Надеюсь, это руководство, посвященное отслеживанию Wi-Fi устройство
при помощи Wireshark, вам понравилось.

Каждому из устройств, подключенных к вашей сети, назначен IP-адрес. Это относится и к вашей беспроводной точке доступа, и ей присвоен собственный IP-адрес. Иногда вам может понадобиться получить доступ к этому IP-адресу, чтобы выполнить определенные действия, такие как изменение конфигурации сети, установка нового пароля Wi-Fi и т. д.

Если вы не указали этот IP-адрес где-либо, что в большинстве случаев маловероятно, вам может понадобиться один из нескольких способов найти IP-адрес вашей беспроводной точки доступа на ваших компьютерах. Существуют методы поиска требуемого IP-адреса для компьютеров под управлением Windows и Mac, и вы можете использовать любой из них для получения доступа к IP-адресу вашего WAP. Методы включают как графический, так и интерфейс командной строки.

Найти беспроводную точку доступа IP в Windows (GUI)

Если вы уже подключены к сети через WiFi или Ethernet, вы можете войти в меню настроек вашего адаптера, чтобы узнать IP-адрес вашей точки беспроводного доступа.

1. Щелкните правой кнопкой мыши значок сети на панели задач и выберите «Открыть параметры сети и Интернета».

2. На следующем экране выберите параметр «Настройка параметров адаптера». Вы не собираетесь ничего менять, хотя.

3. На следующем экране показаны все адаптеры, доступные на вашем компьютере. Вам необходимо щелкнуть правой кнопкой мыши на текущем и выбрать опцию, которая говорит о «Состоянии».

4. На следующем экране нажмите кнопку «Сведения», чтобы просмотреть более подробную информацию о вашей сети.

5. Теперь вы должны увидеть несколько IP-адресов на вашем экране. Найдите тот, который напечатан рядом со Шлюзом по умолчанию IPv4, и это IP-адрес вашей беспроводной точки доступа.

Найти IP-адрес беспроводной точки доступа в Windows (CLI)

Если вам нужно слишком часто находить IP-адреса различных точек беспроводного доступа и вы предпочитаете более простое решение, использование утилиты командной строки для выполнения этой задачи будет более удобным для вас.

Есть команда, которую вы можете запустить в утилите, которая позволит вам увидеть множество деталей о вашей сети, включая IP-адрес WAP.

1. Одновременно нажмите клавиши Windows + R, введите cmd в поле на экране и нажмите Enter.

2. Когда запускается командная строка, введите следующую команду «ipconfig» и нажмите Enter.

3. Как только команда будет выполнена, вы увидите несколько IP-адресов на вашем экране. IP-адрес, показанный рядом со Шлюзом по умолчанию, является IP-адресом вашей беспроводной точки доступа.

Просмотр IP-адреса беспроводной точки доступа на Mac (GUI)

IP-адрес вашей беспроводной точки доступа также может быть обнаружен на вашем компьютере Mac. Если вы выберете метод с графическим интерфейсом, все, что вам в основном нужно, это нажать на несколько опций, и вы получите доступ к необходимому IP-адресу вашего WAP. Предполагается, что вы уже подключены к сети через WiFi.

1. Нажмите на значок Wi-Fi в строке меню Mac и выберите опцию «Открыть настройки сети». Он открывает настройки вашей сети.

2. Выберите Wi-Fi на левой боковой панели, а затем нажмите «Дополнительно» на правой боковой панели.

3. На следующем экране нажмите на вкладку TCP / IP в верхней части. IP-адрес вашей беспроводной точки доступа должен быть указан рядом с Маршрутизатором. Теперь вы можете использовать его для настройки вашей сети.

Просмотр IP-адреса беспроводной точки доступа на Mac (CLI)

Mac Terminal имеет ряд команд, которые можно использовать для выполнения различных задач, и одна из них позволяет просматривать информацию о сети. Вы можете использовать его, чтобы найти IP-адрес вашей беспроводной точки доступа. Команда должна работать и в Linux.

1. Нажмите на Launchpad в Dock, найдите терминал и нажмите на него, чтобы открыть его.

2. Введите следующую команду «netstat -nr | grep default» и нажмите Enter.

3. В отличие от других методов, вы увидите только один IP-адрес рядом со значением по умолчанию. Это IP-адрес вашей беспроводной точки доступа, и вы можете записать его для дальнейшего использования.

Сканирование беспроводных точек доступа при выключенной трансляции SSID

Одной из особенностей беспроводных точек доступа является то, что вы можете скрыть их от обнаружения кем-либо. Если кто-то отключил широковещательную рассылку SSID, вы не сможете узнать его WAP-IP-адрес, поскольку его сеть просто не будет найдена в вашем списке.

Если вам нужно найти эти точки доступа, вам нужно использовать приложение сетевого сканера. NetSpot (freemium) – это одно из приложений, которое позволяет сканировать как скрытые, так и не скрытые сети вокруг вас. Использовать его довольно просто, так как все, что вам нужно сделать, это установить и запустить его.

1. Загрузите, установите и запустите NetSpot на вашем компьютере.

2. Нажмите «Обнаружить» при запуске и подождите, пока он просканирует сети вокруг вас.

3. Вы увидите список сетей, которые он может искать для вас.

Разница между WAP и маршрутизатором

Точка беспроводного доступа и маршрутизатор не должны путаться друг с другом. На самом деле это две разные вещи, и поэтому они работают немного по-другому.

Маршрутизатор на самом деле является концентратором, к которому вы подключаете свои устройства, и отвечает за обработку и управление вашей сетью. С другой стороны, точка беспроводного доступа – это точка беспроводного доступа, к которой вы подключаете свои устройства, а затем подключающая вас к основной сети.

Точки беспроводного доступа обычно используются для расширения зоны действия основной сети, чтобы больше людей могли присоединиться к сети. Маршрутизатор может иметь несколько точек беспроводного доступа для различных целей, и пользователи могут подключаться к ним.

MiAl

(@mial)

Участник Admin

Присоединился: 5 лет назад

Сообщения: 267

Topic starter
06/10/2019 8:15 дп  

Рассмотрим способы геолокации беспроводных точек доступа по их MAC-адресу, который также называют BSSID.

Вариантов и сервисов, на самом деле, очень много. Я покажу два способа:

  • как показать точку доступа Wi-Fi на карте
  • как получить координаты беспроводной точки доступа

Как найти расположение точки доступа Wi-Fi на карте

Первый вариант — это использование сервиса 3WiFi — у него много интересных функций, смотрите статью «Сервис 3WiFi: пароли от точек доступа Wi-Fi».

Чтобы найти расположение интересующей вас точки доступа, перейдите на вкладку «Поиск». Есть несколько вариантов поиска — если у вас есть BSSID / MAC, то введите соответствующее значение в это поле — результаты будут самыми точными.

Если у вас есть только имя беспроводной точки доступа, то введите его в поле «ESSID / Имя» – в зависимости от имени, результатов может быть довольно много.

К примеру, меня интересует расположение Точки Доступа Wi-Fi с BSSID 14:D6:4D:37:49:22

Мы видим координаты этой ТД, а при клике на значок карты, мы увидим, в каком городе, на какой улице и в каком доме эта Wi-Fi сеть:

Как найти координаты точки доступа

Предыдущий способ удобен для обычных пользователей, теперь рассмотрим вариант для программистов, если вы хотите добавить геолокацию Wi-Fi точек доступа в свою программу. Также этот вариант подойдёт в качестве альтернативы для всех, поскольку используется другая база данных — если вы не нашли ТД в 3WiFi, то есть шанс найти её здесь.

Чтобы получить информацию, откройте в браузере (или с помощью cURL) ссылку вида:

 https://api.mylnikov.org/geolocation/wifi?v=1.2&bssid=MAC-АДРЕС 

Где вместо MAC-АДРЕС укажите интересующий вас BSSID / MAC. Например, я хочу узнать про C8:38:70:AD:BB:48, тогда открываю следующую ссылку:

 https://api.mylnikov.org/geolocation/wifi?v=1.2&bssid=C8:38:70:AD:BB:48 

В ответ получаю следующую строку:

{"result":200, "data":{"lat": 55.96650313423, "range": 248.282, "lon": 37.41521290227, "location": "", "time": 1570335617}}

В ней:

"lat": 55.96650313423
"lon": 37.41521290227

это долгота и широта, то есть географический координаты Wi-Fi сети.

По широте и долготе можно искать в картах Google: https://www.google.com/maps/, достаточно ввести эти две цифры, например:

55.96650313423,37.41521290227

Кстати, можете напрямую обращаться к адресу вида: https://www.google.com/maps/place/ШИРОТА,ДОЛГОТА , например https://www.google.com/maps/place/55.96663351105,37.41517074071

drygdryg

(@drygdryg)

New Member

Присоединился: 2 года назад

Сообщения: 2

03/03/2021 6:12 дп  

Совсем недавно выпустил простую программку для решения данной задачи.

Использует как широко известные ресурсы (вроде mylnikov.org, который приведён здесь), так и менее известные, которые работают с двоичными протоколами сериализации данных (protobuf в приватных API Apple и Google):

https://drygdryg.github.io/geomac-webpage

В целях обеспечения безопасности беспроводной сети рекомендуют определенным образом настраивать ее параметры. Обычно применяют функцию скрытия общедоступного имени точки доступа.

Как найти точку доступа wifi

Вам понадобится

  • – Wi-Fi роутер.

Инструкция

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

Подключите приобретенное оборудование к электросети. Соедините его с кабелем провайдера, используя для этой цели порт WAN (DSL). Теперь подключите стационарный компьютер или ноутбук к LAN-порту роутера. Запустите интернет-браузер на выбранном компьютере.

Введите в адресную строку запущенной программы IP-адрес роутера, который можно найти в инструкции к сетевому оборудованию. После входа в веб-интерфейс настроек роутера перейдите в меню WAN. Создайте и настройте подключение к интернету для сетевого устройства. Сохраните параметры сети.

Теперь откройте меню настройки беспроводной точки доступа (Wi-Fi). Выберите тип безопасности, введите имя сети и установите пароль. Активируйте пункт «Скрыть имя (SSID) сети». Сохраните параметры беспроводной точки доступа. Перезагрузите маршрутизатор для их применения. Дождитесь, пока устройство получит доступ в интернет.

Теперь включите ноутбук. Откройте центр управления сетями и общим доступом. Перейдите к пункту «Управление беспроводными сетями». Нажмите кнопку «Добавить». Укажите первый пункт «Создать профиль сети вручную».

В открывшемся меню введите те же значения, которые вы указывали при настройке точки доступа. Обязательно проверьте правильность следующих данных: имя, тип безопасности, тип шифрования и ключ безопасности.

Теперь установите флажки возле пунктов «Запускать это подключение автоматически» и «Подключаться, даже если сеть не производит широковещательную передачу». Теперь ваш ноутбук будет автоматически выполнять поиск и подключение к скрытой точке доступа.

Источники:

  • как найти в компьютере wifi

Войти на сайт

или

Забыли пароль?
Еще не зарегистрированы?

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Добавить комментарий