Потрібен спосіб витягнути адреси MAC з мого маршрутизатора для проекту «Хто вдома»


11

Цей проект раніше був зроблений з Bluetooth, але діапазон 30 футів та додаткове споживання батареї змушують мене просто пінг-роутером замість телефонів людей. Я знаю, що маршрутизатори відслідковують унікальні MAC-адреси для кожного пристрою. Я сподівався зареєструвати адресу кожного телефону та дозволити ПІ періодично перевіряти маршрутизатор, щоб оновити динамічну веб-сторінку, щоб відобразити, хто є вдома.

Я хочу знати, чи є розумний спосіб отримати цю інформацію за допомогою PI.


а як з wifi (замість цього пінг телефонів імен хостів)?
користувач236012

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

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

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

1
Екран скрабування на роутері? Ви також можете оновити маршрутизатор на базі Linux (openwrt) і просто увійти та заглянути в кеш арпу.
Thorbjørn Ravn Andersen

Відповіді:


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? Або є активна сторінка з'єднання маршрутизатора?
Четанська Баргава

Залежить від маршрутизатора, але в більшості з них є сторінка, в якій перераховано всі підключені пристрої. Цей приклад із головної моєї мережі
MadeInDreams

6

Для того, щоб відстежувати унікальні mac-адреси на вашому Raspberry Pi, вам потрібен інструмент (швидше сервіс) під назвою arpwatch . Я широко використовував arpwatch на BSD, і він записує всі запити arp і rarp у syslog.

З Syslog ви можете проаналізувати дати та час та 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

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

4

Я щойно грав разом із версією командного рядка fing . Це пристойно працює, щоб знайти все в мережі та виплюнути файли CSV, що містять:

  • IP-адреса
  • Спеціальна назва вузла (якщо у файлі .properties призначено власні імена)
  • Стан (вгору / вниз)
  • Мітка часу останньої зміни
  • Ім'я хоста (якщо ви ввімкнули DNS)
  • Адреса обладнання (якщо ви відкриваєте локальну мережу)
  • Постачальник обладнання

Згідно з попередніми відповідями, для отримання вмісту CSV-файлів на веб-сторінку знадобиться деяка маніпуляція текстом, і будьте уважні, що ви публікуєте зовні.

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


3

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

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

Деякі маршрутизатори блокують цей тип функцій за замовчуванням, і ваш може бути налаштований як такий. Якщо це не працює, трохи розкопайте його документацію, щоб перевірити, як це дозволити.

ПРИМІТКА БЕЗПЕКИ :

Є дуже серйозні наслідки щодо безпеки веб-сайту, який відображає, хто зараз перебуває вдома. Будь ласка, добре подумайте про безпеку, яка існує, і про те, чи достатньо вона хороша для пов'язаних із цим ризиків.


Гарна ідея, я думаю, я відкликаю свій попередній коментар.
Ghanima

1
Є кілька цікавих перспективні застереження про використання агр для цього тут . Вони припускають, що пристрої можуть не з’являтися, якщо вони не надіслали жодних пакетів до запущеного пристрою arp, і тому може знадобитися пінг.
goobering

@goobering +1. просто запущена команда arp не перелічить усіх активних хостів у мережі. Arpwatch буде реєструвати всі пакети arp в мережі.
Четан Бхаргава

1

Це можна зробити, і інші люди запропонували кілька хороших методів. Я написав сценарій python кілька років тому, щоб скріпати цю інформацію з маршрутизатора netgear і кинув її на github. Його можна знайти тут . Це грубо, і, дивлячись на це зараз, я би переробив це дещо інакше, але він працював майже на ту саму мету, як і ти, пару років, поки я не переїхав.


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