2011-07-15 17:51:44 +0000 2011-07-15 17:51:44 +0000
65
65

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 (sous Linux/Debian) d'afficher la liste de tous les ordinateurs du même réseau local que mon netbook. J'ai essayé “arp -n” mais je ne pense pas que la liste soit complète, car mon iPhone est sur le même routeur wi-fi que mon netbook, et ça n'a pas marché. Y a-t-il un meilleur moyen d'obtenir une liste complète des machines qui partagent toutes la même passerelle ?

Réponses (11)

61
61
61
2011-07-15 17:55:50 +0000

Obtenez nmap . C'est le programme Trinity utilisé dans The Matrix et vous pouvez faire un scan pour trouver tous les appareils qui sont connectés au LAN sur lequel vous êtes et plus encore. Ici est le guide de référence.

41
41
41
2014-12-09 15:56:20 +0000

C'est ce que j'utilise, nmap, et une adresse utilisant la notation en bloc CIDR du réseau que vous voulez scanner. Vous devez d'abord installer nmap, car il n'est peut-être pas préinstallé avec votre distribution. Sur Ubuntu :

sudo apt-get install nmap

Ensuite, trouvez votre adresse réseau en utilisant ifconfig :

ifconfig

Sortie ifconfig pour l'interface que je veux scanner :

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'adr inet et le masque pour trouver l'adresse réseau en notation CIDR, plus d'informations sur CIDR ici . L'adresse est :

192.168.1.0/24

Exécuter nmap en utilisant le paramètre -sP, qui ne fera pas plus que vérifier si l'hôte est en ligne :

sudo nmap -sP 192.168.1.0/24

La sortie de 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

C'est tout, si vous avez besoin de plus d'aide avec nmap, voir la documentation officielle de nmap , ou exécuter :

nmap --help
18
18
18
2011-07-15 19:12:18 +0000

arp -n vous montre uniquement les machines de votre réseau local avec lesquelles votre machine a déjà parlé. Vous pouvez obtenir une meilleure liste en envoyant un ping aux adresses de diffusion et de multicast de tous les hôtes :

L'adresse de diffusion de “tous les hôtes” (en binaire). Notez que la plupart des piles IP traduiront cela en adresses de diffusion de sous-réseau pour tous les sous-réseaux auxquels vous êtes rattaché :

ping 255.255.255.255

L'adresse de diffusion de sous-réseau pour votre sous-réseau actuel. Donc, en supposant que vous êtes sur 192.168.1.0/24 :

ping 192.168.1.255

L'adresse de diffusion multicast de “tous les hôtes”. J'aime beaucoup celle-ci parce qu'il est plus probable de trouver des hôtes configurés pour d'autres sous-réseaux IP, qui se trouvent être connectés au même réseau local Ethernet que vous :

ping 224.0.0.1

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

8
8
8
2017-04-03 21:54:39 +0000

ip neigh et hosts. Aucune carte n'est requise / AUCUN sudo n'est requis.

En vous basant sur cela, vous pouvez construire 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échargez via

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

(ou simplement arp … je n'ai pas vu ça avant)

4
4
4
2016-05-10 08:21:24 +0000

Vous pourriez essayer de pinger tout un sous-réseau donné 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
4
4
2013-12-18 01:44:36 +0000

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

nmap est très bien, même si son utilisation est un peu déroutante. Voici quelque chose que je lance pour découvrir les périphériques de réseau local qui sont pour la plupart copiables-collants. nmap -sP (ou nmap -sn) scanne par pinging . Il existe d'autres options pour la “découverte d'hôtes”, comme avec nmap -sL ou nmap -Pn.

Way #1.

ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
ehtesh@x200arch:~$ 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
ehtesh@x200arch:~$ 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

Way #2. Je sais que cela fonctionne, mais je ne peux pas dire si c'est la bonne façon de procéder.

ehtesh@x200arch:~$ #ifconfig | grep broadcast
ehtesh@x200arch:~$ 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
ehtesh@x200arch:~$ 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. D'ici là, je m'en tiens à cela.

3
3
3
2011-07-15 18:16:48 +0000

Hunt est un outil de ligne de commande qui est capable de construire une liste de machines au fur et à mesure de leur diffusion sur le réseau pour information. Il utilise les données TCP, UDP, ICMP et ARP pour construire une liste d'adresses MAC actives sur un réseau. C'est un outil passif qui fonctionne par écoute sur le fil.

3
3
3
2019-05-23 17:18:32 +0000

Vous pourriez utiliser fping sudo apt-get install fping (dans les OS de type debian).

fping est similaire au ping, mais beaucoup plus performant lorsque vous faites un ping sur plusieurs hôtes. Le drapeau -r 1 indique à fping de n'effectuer qu'un seul tour. La partie 2>1 permet à grep de filtrer la sortie.

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

afficherait quelque chose comme :

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

Il y a aussi un intéressant drapeau pour nmap qui vous permettrait de voir le vendeur MAC - si connu. A utiliser avec sudo pour voir les adresses MAC.

$ sudo nmap -sP 192.168.1.0/24

Vous obtiendriez par exemple :

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds
3
3
3
2017-11-08 13:22:31 +0000

1. Solution alternative si les diffusions 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. pings tous les 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 tous les appareils qui ont répondu.

  2. ne vérifie pas les connexions actives ou actuelles, mais liste toutes les connexions que le 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 numéros de 1 à 254 (pour tous les numéros de 100 à 150 : seq 100 150)
  • xargs appelle ping et remplace “IP” (-iIP) par le numéro sequence de stdin, donc 192. 168.2.IP passe au 192.168.2.1 pour le premier numéro seq, -P spécifie le nombre de processus ping concurrents xargs doit commencer, je choisis la même quantité +1 que les adresses (=254) qui m'intéressent.
  • ping avec l'adresse ip modifiée par xargs (192.168.2.IP) et un seul ping(-c1) ; vous devez utiliser le même identifiant que celui spécifié pour xargs par dessus l'argument -i ; dans ce cas IP
  • grep time= pour supprimer toute ligne contenant des informations superflues, nous ne sommes intéressés que par les réponses, qui fournissent un temps de retour (=got a response)
  • arp -a pour afficher des paires de noms (ip) valides ;

j'appelle cela ma commande pingall et l'ai rendue disponible sur un alias dans ~/.bashrc :

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
3
3
3
2016-07-25 17:31:07 +0000

Pour scanner le statut d'une série d'adresses IP, c'est simple et agréable :

sudo nmap -sn 192.168.1.2-20

Où :

-sn: Ping Scan - disable port scan

Note :

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

Je l'ai fait sous Mac OS X (qui est basé sur BSD). Je ne suis pas sûr que la version Linux présente des différences.

2
2
2
2016-10-20 10:28:47 +0000

Pour une liste plus compacte des appareils connectés :

nmap -sL 192.168.0.* | grep \(1

Explication.

nmap -sL 192.168.0.* va lister toutes les IP dans le sous-réseau et marquer 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 appareils ont le même nom, nmap n'affichera que celui qui a été connecté au routeur last.