Нужен способ получить MAC-адреса из моего маршрутизатора для проекта «Кто дома»


11

Такого рода проект был реализован с помощью Bluetooth и раньше, но 30-футовый диапазон и дополнительное потребление батареи заставляют меня хотеть просто пинговать роутер вместо телефонов людей. Я знаю, что маршрутизаторы отслеживают уникальные MAC-адреса для каждого устройства. Я надеялся зарегистрировать адрес каждого телефона и попросить PI периодически проверять маршрутизатор, чтобы обновлять динамическую веб-страницу, чтобы показать, кто дома.

Я хочу знать, есть ли разумный способ получить эту информацию с помощью PI.


а как насчет wifi (пингуйте имена хостов телефонов)?
user236012

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

Я сделал нечто подобное в C # для Windows здесь: stackoverflow.com/questions/2567107/… - Я был бы рад выслать вам код самой последней версии, если хотите. Я не знаю, насколько полезен C # на Raspberry Pi, но он должен указать вам правильное направление. Он достоверно обнаруживает, что я дома еще до того, как вхожу из гаража.
Aric TenEyck

Я собираю это + намного больше информации, помещая скрипт bash на маршрутизатор, который каждую минуту публикует результаты на веб-сервере. С помощью этой системы я отслеживаю и управляю временем безотказной работы в Интернете, подключенными клиентами, IP-адресами WAN, затуханием в оптоволокне и бюджетом энергопотребления, услугами VOIP, паролями Wi-Fi и т. Д. Пробег зависит от мощности процессора вашего маршрутизатора.
EDP

1
Соскоб экрана на роутере? Вы также можете перейти на маршрутизатор на основе Linux (openwrt) и просто войти в систему и посмотреть в кэш arp.
Торбьерн Равн Андерсен

Ответы:


6

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

Вот быстрый пример того, как я буду действовать;

На странице вашего роутера вы можете найти что-то вроде следующего:

<div id="flex">
 <div id="dm-name">
  name : Your_device_name
 </div>
 <div id="dm-ip">
  IP : 192.168.x.xxx
 </div>
 <div id="dm-mac">
  <span>MAC:D4:04:CD:FE:5A:17</span>
 </div>
</div>

Итак, мы знаем, что каждое устройство будет перечислено таким образом. И что все адреса MAC будут иметь одинаковую длину.

Сценарий может быть что-то вроде этого;

var string_to_parse = "file read from router.html";
cursor = 0;  // The position of your cursor;
i =0;
    while(cursor > 0){

    begin_at = string_to_parse.indeOf('MAC:');
    end_at = length_of_Mac; // this is standard for al mac

    mac[i] = string_to_parse.substring(begin_at, begin_at + end_at);
    cursor = begin_at + end_at;
i++;
    }

Этот код нужно настроить, но идея есть. Это цикл, который будет запускать весь файл, чтобы найти все адреса Mac. пока он не достигнет конца файла.


Это то, что я бы сделал. Он имеет дополнительный бонус обнаружения, если ваш маршрутизатор мертв.
Slebetman

1
+1 Соскоб сайта - интересный выбор. Я немного раздражен, я не думал об этом сам.
Jacobm001

@MadeInDreams Страница маршрутизатора, на которую вы ссылаетесь, является страницей аренды DHCP маршрутизатора? Или есть страница активного подключения маршрутизатора?
Четан Бхаргава

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

6

Чтобы отслеживать уникальные mac-адреса на вашем Raspberry Pi, вам нужен инструмент (скорее сервис) под названием arpwatch . Я широко использовал arpwatch в BSD, и он записывает все запросы arp и rarp в системный журнал.

Из системного журнала вы можете анализировать даты и время и MAC-адреса.

ARP работает, и таблица существует только в физической сети (техническое слово: домен коллизий). Когда пакет отправляется в другую сеть, MAC-адрес источника заменяется MAC-адресом маршрутизатора.

При запуске arpкоманды на Raspberry Pi будут перечислены только mac + IP-адреса хостов, которые провели транзакции (IP-связь) с хостом, на котором выполняется команда (Raspberry Pi). Он не будет перечислять mac-адреса других хостов в сети.

Другим продвинутым способом было бы использовать Nmap на Raspberry Pi для обнаружения хоста. Вы можете использовать nmap -sPдля проверки связи всех хостов в сети. Он сообщит вам IP-адреса всех активных хостов в вашей сети. Затем вы можете запустить команду arp, чтобы узнать mac кто активен.

chetan@Linux:~$ nmap -sP 192.168.100.0/24

Starting Nmap 6.40 ( http://nmap.org ) at 2016-02-23 16:08 PST
Nmap scan report for 192.168.100.4
Host is up (0.0087s latency).
Nmap scan report for 192.168.100.58
Host is up (0.0024s latency).
Nmap scan report for 192.168.100.160
Host is up (0.049s latency).
Nmap scan report for 192.168.100.164
Host is up (0.063s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.68 seconds

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

@goldilocks +1, да, я подумал об этом после того, как проголосовал за принятый ответ. Я предполагаю, что у них есть маршрутизатор, у которого есть страница для активных соединений (состояние SPI или подобное). Хороший роутер у них есть.
Четан Бхаргава

4

Я только что играл с версией командной строки fing . Это делает приличную работу по поиску всего в сети и выплевывая файлы CSV, содержащие:

  • айпи адрес
  • Пользовательское имя узла (если вы назначили пользовательские имена в файле .properties)
  • Состояние (ВВЕРХ / ВНИЗ)
  • Отметка времени последнего изменения
  • Имя хоста (если вы включили DNS)
  • Аппаратный адрес (если вы обнаруживаете локальную сеть)
  • Поставщик оборудования

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

Я довольно широко использовал версию для Android, и она отлично справляется с поиском всего в моей домашней сети (и довольно забавно играть с ним по общедоступному wifi).


3

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

Примечание о функциональности :

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

ПРИМЕЧАНИЕ БЕЗОПАСНОСТИ :

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


Хорошая идея, я думаю, я отозвал свой предыдущий комментарий.
Ганима

1
Есть несколько интересных перспективные предостережения об использовании агр для этого здесь . Они предполагают, что устройства могут не отображаться, если они не отправляли пакеты на устройство, работающее с arp, и что может потребоваться проверка связи.
Губеринг

@ Гугеринг +1. простое выполнение команды arp не выведет список всех активных хостов в сети. Arpwatch будет регистрировать все пакеты arp в сети.
Четан Бхаргава

1

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


+1 Ваш сценарий, безусловно, можно улучшить, но это отличное решение проблемы.
Jacobm001
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.