web-dev-qa-db-fra.com

Afficher la liste des ordinateurs sur un réseau local sous Linux

Je suis un développeur Web qui essaie de mieux maîtriser la sécurité. J'essaie de trouver un moyen (sur les distributions basées sur Linux/Debian) de répertorier tous les ordinateurs sur le même réseau local que mon netbook. J'ai essayé "arp -n" mais je ne pense pas que ce soit une liste complète, car mon iPhone est connecté au même routeur wi-fi que mon netbook, et cela n'a pas été mis à jour. Existe-t-il un meilleur moyen d’obtenir une liste complète des machines partageant la même passerelle?

59
CaptSaltyJack

Obtenir nmap . C'est le programme utilisé par Trinity dans Matrix et vous pouvez effectuer une analyse pour rechercher tous les périphériques connectés au réseau local et plus encore.

Ici est le guide de référence.

58
Tyler Faile

C’est ce que j’utilise, nmap et une adresse utilisant la notation de bloc CIDR du réseau que vous souhaitez analyser. Vous devez d’abord installer nmap car il est possible que votre distribution ne soit pas préinstallée. Sur Ubuntu:

Sudo apt-get install nmap

Ensuite, déterminez votre adresse réseau en utilisant ifconfig:

ifconfig

sortie ifconfig pour l'interface que je souhaite analyser:

wlan1     Link encap:Ethernet  HWaddr 00:1f:3b:03:d2:bf  
          inet addr:192.168.1.104  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
          ...

Utilisez l'inet addr et le masque pour déterminer l'adresse réseau en notation CIDR, plus d'informations sur CIDR ici . L'adresse est:

192.168.1.0/24

Exécutez nmap en utilisant le paramètre -sP, qui n’analysera que si l’hôte est en ligne:

Sudo nmap -sP 192.168.1.0/24

la sortie nmap ressemblera à ceci:

Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds

Voilà, si vous avez besoin d’aide supplémentaire pour nmap, consultez la documentation officielle de nmap , ou exécutez:

nmap --help 
35
radtek

arp -n ne montre que les machines de votre réseau local avec lesquelles votre machine a déjà parlé. Vous pouvez mieux renseigner cette liste en envoyant une requête ping aux adresses de diffusion et de multidiffusions de tous les hôtes:

L'adresse de diffusion "tous les" (en binaire). Notez que la plupart des piles IP traduiront cette information en adresses de diffusion de sous-réseau pour tous les sous-réseaux auxquels vous êtes attaché:

ping 255.255.255.255

Adresse de diffusion du sous-réseau pour votre sous-réseau actuel. Donc, en supposant que vous soyez sur 192.168.1.0/24:

ping 192.168.1.255

L'adresse multicast "tous les hôtes". J'aime beaucoup celui-ci car il est plus probable que les hôtes configurés pour d'autres sous-réseaux IP soient connectés au même réseau Ethernet que vous:

ping 224.0.0.1

Notez que cette méthode et les autres méthodes mentionnées jusqu'à présent dans d'autres réponses ne recherchent que les hôtes accessibles sur IP sur le réseau actuel. C'est probablement tout ce dont vous avez besoin, mais il est possible pour un attaquant d'espionner un réseau ou de faire de mauvaises choses à un réseau sans être visible via IP.

18
Spiff

ip neigh et hosts. NO nmap requis/NO Sudo requis .

Sur cette base, vous pouvez créer un script Python:

#!/usr/bin/env python

"""List all hosts with their IP adress of the current network."""

import os

out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('Host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))

Télécharger via

wget https://Gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py

(ou simplement arp ... je ne l'avais pas vu auparavant)

8
Martin Thoma

Vous pouvez essayer de faire un ping de tous les sous-réseaux avec un petit script shell Linux par exemple

$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done
4
dmn8

Je n'ai pas trouvé les réponses existantes suffisamment satisfaisantes, alors j'ai pensé essayer. Après tout, la FAQ suggère de fournir le contexte pour les liens .

nmap est génial, bien qu’un peu déroutant à utiliser. Voici quelque chose que je lance pour découvrir les périphériques réseau locaux qui sont principalement copier-coller. nmap -sP (ou nmap -sn) scanne par pinging . Il existe d'autres options pour 'Découverte de l'hôte', comme avec nmap -sL ou nmap -Pn.

Voie n ° 1.

[email protected]:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
[email protected]:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
[email protected]:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
[email protected]:~$ nmap -sP 172.18.72.0/24
Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST
Nmap scan report for 172.18.72.2
Host is up (0.017s latency).
<... 15 IP addresses snipped ...>
Nmap scan report for 172.18.72.253
Host is up (0.13s latency).
Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds
[email protected]:~$ arp -a | sort -n -k 1,1                            
? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0
? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0
? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0
? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0
? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0
? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0
? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0
? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0
? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0
? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0
? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0
? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0
? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0
? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0
? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0

Voie n ° 2. Je sais que cela fonctionne, mais je ne peux pas dire si c'est la bonne façon de faire.

[email protected]:~$ #ifconfig | grep broadcast
[email protected]:~$ ip address show wlp3s0 | grep brd
    link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
[email protected]:~$ ping -b -c 3 -i 20 172.18.75.255
<... similar output to above ...>

Je serais heureux de savoir s'il existe des moyens plus efficaces. Jusque-là, je m'en tiens à cela.

4
Ehtesh Choudhury

Pour analyser l’état d’une plage d’adresses IP, c’est très simple:

Sudo nmap -sn 192.168.1.2-20

Où:

         -sn: Ping Scan - disable port scan

Remarque:

  • Dans les versions précédentes de Nmap, -sn était connu sous le nom -sP

Je l'ai fait sur Mac OS X (basé sur BSD). Je ne suis pas sûr si la version Linux a des différences.

2
Sridhar-Sarnobat

Hunt est un outil de ligne de commande capable de créer une liste de machines lors de la diffusion d'informations sur le réseau. Il utilise les données TCP, UDP, ICMP et ARP pour créer une liste d'adresses MAC actives sur un réseau. C'est un outil passif qui fonctionne en écoutant sur le fil.

2
Sean C.

Pour une liste plus compacte d'appareils connectés:

nmap -sL 192.168.0.* | grep \(1

Explication.

nmap -sL 192.168.0.* liste toutes les adresses IP du sous-réseau et marque celles qui ont un nom:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for Android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

Comme tous les enregistrements intéressants commencent par la parenthèse ( et le chiffre 1, nous filtrons pour cela avec | grep \(1 (une barre oblique inverse est nécessaire pour échapper à la parenthèse)

Quirk
Attention, si deux périphériques portent le même nom, nmap affichera uniquement celui qui a été connecté au routeur last

1
Alexander Malakhov

1. Solution alternative si les émissions et nmap ne sont pas disponibles:

seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time=
arp -a

2a. ou demandez simplement à votre serveur de nom de domaine :

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2b. sans awk

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. envoie une requête ping à tous pingable Network-Devices dans le sous-réseau 192.168.2.0/24 en parallèle (pour réduire le temps d’exécution). Ensuite, arp devrait afficher chaque périphérique ayant répondu.

  2. ne vérifie pas les connexions actives ou actuelles, mais répertorie toutes les connexions du service de domaine local conserve une entrée, même les plus anciennes.

Explication plus détaillée:

  • seq 254 pour créer tous les nombres de 1 à 254 (pour tous les nombres de 100 à 150: seq 100 150)
  • xargs appelle ping et remplace "IP" (-iIP) par le numéro sequence de stdin, de sorte que 192.168.2.IP passe à 192.168.2.1 pour le premier numéro seq, -P spécifie le nombre de processus ping simultanés xargs devrait commencer, je choisis le même montant +1 que les adresses (= 254) je suis intéressé.
  • ping avec l'adresse IP modifiée par xargs (192.168.2.IP) et uniquement ping une fois (-c1); vous devez utiliser le même identifiant que celui spécifié pour xargs par rapport à l'argument -i dans ce cas IP
  • grep time= pour supprimer chaque ligne contenant des informations superflues, nous ne sommes intéressés que par les réponses, qui fournissent un temps aller-retour (= obtenu une réponse)
  • arp -a pour afficher les paires de noms valides (ip)

J'appelle cela ma commande pingall et la rend disponible via un alias dans ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
1
Don Question