Besoin d'un moyen d'extraire les adresses MAC de mon routeur pour un projet «Who's Home»


11

Ce genre de projet a déjà été fait avec Bluetooth, mais la portée de 30 pieds et la consommation de batterie supplémentaire me donnent envie de simplement pinguer le routeur au lieu des téléphones des gens. Je sais que les routeurs gardent une trace des adresses MAC uniques pour chaque appareil. J'espérais enregistrer l'adresse de chaque téléphone et demander au PI de vérifier périodiquement le routeur pour mettre à jour une page Web dynamique pour afficher qui est à la maison.

Je veux savoir s'il existe un moyen raisonnable d'extraire ces informations avec le PI.


qu'en est-il du wifi (cingler les noms d'hôte des téléphones à la place)?
user236012

2
Vous pouvez également attribuer des adresses IP statiques à partir du routeur, puis utiliser nmap et les adresses IP pour identifier les périphériques.
ArtOfCode

J'ai fait quelque chose de similaire en C # sur Windows ici: stackoverflow.com/questions/2567107/… - Je serais heureux de vous envoyer le code de version le plus récent si vous le souhaitez. Je ne sais pas à quel point C # est utile sur un Raspberry Pi, mais il devrait vous orienter dans la bonne direction. Il détecte de manière fiable que je suis à la maison avant même de rentrer du garage.
Aric TenEyck

Je capture cela + beaucoup plus d'informations en mettant un script bash sur le routeur qui publie les résultats sur un serveur Web toutes les minutes. Avec ce système, je surveille et gère la disponibilité d'Internet, les clients connectés, les IP WAN, l'atténuation de la fibre et le budget d'alimentation, les services VOIP, les mots de passe wifi, etc. Le kilométrage diffère selon la puissance du processeur de votre routeur.
EDP

1
Grattage d'écran sur le routeur? Vous pouvez également passer à un routeur basé sur Linux (openwrt) et simplement vous connecter et regarder dans le cache arp.
Thorbjørn Ravn Andersen

Réponses:


6

C'est possible. Je vous suggère de fournir à votre script les informations de connexion et de lire la page qui affiche les informations. Ensuite, vous pouvez analyser son contenu et remplir un tableau avec les données souhaitées. Étant donné que ces pages contiennent parfois plus d'informations telles que les dates et les heures, vous pouvez créer un très bon journal.

Voici un exemple rapide sur la façon dont je procéderais;

Sur la page de votre routeur, vous pouvez trouver quelque chose comme ce qui suit;

<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>

Nous savons donc que chaque appareil sera répertorié comme ça. Et que toutes les adresses MAC auront la même longueur.

Le script pourrait être quelque chose comme ça;

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++;
    }

Ce code devra être peaufiné mais l'idée est là. C'est une boucle qui exécutera tout le fichier pour trouver toutes les adresses Mac. jusqu'à ce qu'il atteigne la fin du fichier.


Voilà ce que je ferais. Il a l'avantage supplémentaire de détecter si votre routeur est mort.
slebetman

1
+1 Le grattage de site Web est un choix intéressant. Je suis un peu agacé, je n'y ai pas pensé moi-même.
Jacobm001

@MadeInDreams La page de routeur à laquelle vous faites référence est la page de location DHCP du routeur? Ou existe-t-il une page de connexion active du routeur?
Chetan Bhargava du

Dépendez de votre routeur, mais la plupart d'entre eux ont une page qui répertorie tous les appareils connectés. Cet exemple provient de la page principale de mon réseau
MadeInDreams

6

Afin de suivre les adresses mac uniques sur votre Raspberry Pi, vous avez besoin d'un outil (plutôt d'un service) appelé arpwatch . J'ai beaucoup utilisé arpwatch sur BSD et il enregistre toutes les requêtes arp et rarp dans syslog.

Depuis Syslog, vous pouvez analyser les dates et heures et les adresses mac.

ARP fonctionne et la table n'existe que sur le réseau physique (mot technique: domaine de collision). Lorsqu'un paquet part pour un autre réseau, l'adresse mac source est remplacée par l'adresse mac du routeur.

L'exécution de la arpcommande sur Raspberry Pi répertorie uniquement les adresses mac + IP des hôtes qui ont effectué une transaction (communication IP) avec l'hôte sur lequel la commande est exécutée (Raspberry Pi). Il ne répertorie pas les adresses mac des autres hôtes du réseau.

Une autre manière avancée serait d'utiliser nmap sur votre Raspberry Pi pour faire une découverte d'hôte. Vous pouvez utiliser nmap -sPpour envoyer une requête ping à tous les hôtes du réseau. Il vous indiquera les adresses IP de tous les hôtes actifs de votre réseau. Ensuite, vous pouvez exécuter la commande arp pour découvrir mac qui est actif.

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
Je pense que c'est probablement une méthode beaucoup plus robuste et flexible que celle du raclage Web. Sur de nombreux routeurs émis par les FAI, la page censée afficher les appareils connectés avec des informations ne sera pas fiable.
goldilocks

@goldilocks +1, oui, j'y ai pensé après avoir voté pour la réponse acceptée. Je suppose qu'ils ont un routeur qui a une page pour les connexions actives (état SPI ou similaire). Joli routeur qu'ils ont.
Chetan Bhargava

4

Je viens de jouer avec la version en ligne de commande de fing . Il fait un travail décent de tout trouver sur le réseau et de cracher des fichiers CSV contenant:

  • adresse IP
  • Nom personnalisé du nœud (si vous avez attribué des noms personnalisés dans le fichier .properties)
  • L'état (UP / DOWN)
  • L'horodatage du dernier changement
  • Le nom d'hôte (si vous avez activé DNS)
  • L'adresse matérielle (si vous découvrez un réseau local)
  • Le vendeur de matériel

Selon les réponses précédentes, une certaine manipulation de texte serait nécessaire pour obtenir le contenu des CSV sur une page Web, et faites attention à ce que vous publiez en externe.

J'ai utilisé la version Android assez largement et elle fait un bon travail pour tout trouver sur mon réseau domestique (et c'est amusant de jouer avec sur le wifi public).


3

La commande arpvous donnera une liste des appareils connectés au réseau. Vous aurez besoin de faire quelques manipulations de chaîne de base pour obtenir les données que vous voulez, mais ce serait certainement plus facile que d'essayer d'obtenir les informations vous-même.

Note de fonctionnalité :

Certains routeurs bloquent ce type de fonctionnalité par défaut et la vôtre peut être configurée comme telle. Si cela ne fonctionne pas, fouillez un peu sa documentation pour vérifier comment l'autoriser.

NOTE DE SÉCURITÉ :

Le fait d'avoir un site Web qui indique qui est actuellement à la maison a des conséquences très graves sur la sécurité. Veuillez réfléchir très attentivement à la sécurité en place et si elle est suffisante pour les risques encourus.


Bonne idée, je suppose que je retire mon commentaire précédent.
Ghanima

1
Il y a quelques mises en garde intéressantes sur l'utilisation d'arp pour cela ici . Ils suggèrent que les périphériques peuvent ne pas apparaître s'ils n'ont envoyé aucun paquet au périphérique exécutant arp, et qu'un ping peut être nécessaire.
goobering

@goobering +1. l'exécution de la commande arp ne répertoriera pas tous les hôtes actifs sur le réseau. Arpwatch enregistrera tous les paquets arp sur le réseau.
Chetan Bhargava

1

C'est possible, et d'autres personnes ont suggéré de bonnes méthodes. J'ai écrit un script python il y a quelques années pour filtrer ces informations à partir d'un routeur netgear et les ai lancées sur github. Il peut être trouvé ici . C'est grossier, et en le regardant maintenant, je le referais un peu différemment, mais cela a fonctionné à peu près exactement le même but que vous recherchez pendant quelques années jusqu'à ce que je déménage.


+1 Votre script pourrait certainement être amélioré, mais c'est une excellente solution au problème.
Jacobm001
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.