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?
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
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.
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)
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
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
.
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
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.
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:
-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.
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.
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. 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
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.
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 seq
uence 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='