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

62

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?

CaptSaltyJack
la source

Réponses:

58

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

Voici le guide de référence.

Tyler Faile
la source
16
D'ACCORD. On dirait que "sudo nmap -sL 123.123.123. *" Est ce que je recherche, ou peut-être -sP au lieu de -sL. Merci!
CaptSaltyJack
2
installer nmap avecsudo apt-get install nmap
saintali
1
Je pensais que c'était en fait un site Web sérieux, lol +1
user10089632.
38

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 qu’elle ne soit pas préinstallée avec votre distribution. 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 dans la 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 avec nmap, consultez la documentation officielle de nmap ou exécutez:

nmap --help 
radtek
la source
2
nmap -sA 192.168.1.0/24 nmap avec l' option -sAprésente les mêmes résultats descriptifs avec une meilleure lisibilité, qui comprend le nom de l' appareil, IP, Mac, etc comme avec l' option -sP.. Personnellement , je préfère -sA sur -sP pour des raisons de lisibilité.
Jayzcode
@Jayzcode Sur ma machine, -sA ne revient jamais, alors que -sP n'a pris que 3,73 secondes (le routeur, mon PC et un autre PC ont été détectés). Une idée pourquoi?
Rodrigo
17

arp -naffiche uniquement les machines de votre réseau local avec lesquelles votre machine a déjà parlé. Vous pouvez mieux peupler 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 des 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.

Spiff
la source
8

ip neighet 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 n'avais pas vu ça avant)

Martin Thoma
la source
ou justeip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop
ip npour faire court. Peut-être mieux ip n | grep REACHABLE.
Pablo Un
4

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 un contexte pour les liens .

nmapest génial, même si 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 en faisant un ping . Il existe d'autres options pour "découverte de l'hôte", comme avec nmap -sLou nmap -Pn.

Voie n ° 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

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

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. Jusque-là, je m'en tiens à cela.

Ehtesh Choudhury
la source
4

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
dmn8
la source
Dans mon cas dit UP pour tous et ensuite ip ndit ÉCHEC à tous.
Pablo Un
3

Hunt est un outil de ligne de commande capable de créer une liste de machines lors de leur diffusion sur le réseau pour obtenir des informations. 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.

Sean C.
la source
4
Je sais qu'il existe des pages de manuel, mais il serait utile de voir un exemple dans la réponse.
Ehtesh Choudhury
2

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

nmap -sL 192.168.0.* | grep \(1

Explication.

nmap -sL 192.168.0.* listera toutes les IP du sous-réseau et marquera 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 des parenthèses (et des chiffres 1, nous filtrons pour cela avec | grep \(1(une barre oblique inverse est nécessaire pour échapper à la parenthèse)

Quirk
Méfiez-vous que si deux périphériques portent le même nom, nmapseul celui qui a été connecté au dernier routeur sera affiché.

Alexander Malakhov
la source
2

Pour analyser l’état d’une plage d’adresses IP, c’est simple et agréable:

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

Sridhar Sarnobat
la source
1
Génial, tout ce que je devais faire était de taper: sudo nmap -sP 192.168.178.0-255. Cela a fait un scan dans le sous-réseau dans lequel je me trouve.
Leo Gerber
2

Vous pouvez utiliser fping sudo apt-get install fping (dans les systèmes d’exploitation de type debian).

fping est similaire au ping, mais beaucoup plus performant lors du ping de plusieurs hôtes. Le drapeau -r 1 indique à Fping de ne faire qu'un 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 existe également un indicateur intéressant pour nmap qui vous permet de voir le fournisseur de MAC - s’il est connu. Utilisez avec sudo pour voir les adresses MAC.

$ sudo nmap -sP 192.168.1.0/24

Vous obtiendrez 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
utilisateur9869932
la source
1

1. Solution alternative si les émissions nmapne 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 les périphériques réseau pingables du sous-réseau 192.168.2.0/24 en parallèle (pour réduire le temps d’exécution). Ensuite, arpchaque appareil qui a répondu doit être affiché.

  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 254pour créer tous les nombres de 1 à 254 (pour tous les numéros de 100 à 150: seq 100 150)
  • xargsappelle pinget remplace "IP" ( -iIP) par le seqnuméro uence de stdin, de sorte que 192.168.2.IP devient 192.168.2.1 pour le premier seqnuméro, -Pspécifie le nombre de pingprocessus simultanés xargsdevant démarrer, je choisis le même montant +1 comme adresse ( = 254) je suis intéressé.
  • pingavec 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 sur l' -iargument dans ce casIP
  • grep time= pour supprimer chaque ligne contenant des informations superflues, nous ne nous intéressons qu'aux réponses, qui fournissent un temps aller-retour (= obtenu une réponse)
  • arp -a afficher les paires de noms valides (ip)

J'appelle cela ma commande pingall et je l' ai rendue disponible via un alias dans ~/.bashrc:

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