Est-il possible de déterminer les adresses IP des systèmes d'un réseau à l'aide d'un script bash? Et comment?
Installez arp-scan (Sudo apt-get install arp-scan
) et ajoutez la ligne suivante au script:
IPs=$(Sudo arp-scan --localnet --numeric --quiet --ignoredups | grep -E '([a-f0-9]{2}:){5}[a-f0-9]{2}' | awk '{print $1}')
Vous avez maintenant toutes les adresses IP actives dans la variable IPs
.
Remarque: cela ne fonctionnera que sur un réseau directement connecté, c’est-à-dire non accessible via un routeur.
PS: Si vous installez gawk
la commande peut être abrégée en (merci belacqua ):
IPs=$(Sudo arp-scan --localnet --quiet --ignoredups | gawk '/([a-f0-9]{2}:){5}[a-f0-9]{2}/ {print $1}')
Cette réponse utilise la commande nmap
pour collecter des informations sur les hôtes actifs du réseau.
Nmap ("Network Mapper") est un outil open source pour l'exploration de réseau et l'audit de sécurité. Il a été conçu pour analyser rapidement de grands réseaux, même s'il fonctionne correctement contre des hôtes uniques. Nmap utilise de manière innovante les paquets IP bruts pour déterminer quels hôtes sont disponibles sur le réseau, quels services (nom et version de l'application) ces hôtes offrent, quels systèmes d'exploitation (et versions de système d'exploitation) ils exécutent, quels types de filtres de paquets/pare-feu sont utilisés et des dizaines d'autres caractéristiques.
En supposant que vous ayez besoin d’analyser la plage 192.168.0.X, vous pouvez essayer:
nmap -v -sP 192.168.0.0/24
Où 192.168.0.0
est l'adresse du réseau et /24
est le masque de réseau équivalent à 255.255.255.0
. Ainsi, la commande ci-dessus analysera 256 hôtes.
Pour collecter les adresses IP actives, on peut utiliser la ligne suivante:
IPS_UP=$(nmap -nsP 192.168.0.0/24 2>/dev/null -oG - | grep "Up$" | awk '{printf "%s ", $2}')
En réalité, il concatène la liste des adresses IP actives (filtrées par grep
name__) dans une variable appelée IPS_UP
:
nmap
est exécuté avec les commutateurs -n
(aucune résolution de nom), -sP
(analyse du ping) et -oG
pour générer une sortie traitable de grep sur la sortie standard (-
).grep
ne filtre que les lignes contenant le mot "Up" en fin de ligne ("$").awk
imprime la deuxième colonne de la liste en sortie de nmap
name__, qui correspond à l'adresse IP, et ajoute un espace.$()
permet d'affecter la sortie de la chaîne de commandes à la variable IPS_UP
.Le mappeur de réseau peut être installé à l'aide de Sudo apt-get install nmap
.
Notenmap
pourrait découvrir plus d'hôtes s'il était exécuté par un utilisateur privilégié. En effet, différents types de paquets sont envoyés pour analyser un hôte. En modifiant la ligne ci-dessus pour lire Sudo nmap ...
permet d’exécuter la commande nmap
en tant qu’utilisateur root.
Évidemment, c'est une mauvaise idée, mais je l'ai essayé
#!/bin/bash
IP=$(ifconfig eth0 | grep Mask | cut -d ':' -f2 | cut -d " " -f1)
Mask=$(ifconfig eth0 | grep Mask | cut -d ':' -f4 | cut -d " " -f1)
IFS=.
IPArray=($IP)
MaskArray=($Mask)
NetArray=()
Start=0
Max=$(( 255 * 255 * 255 * 255 ))
for key in "${!IPArray[@]}";
do
NetArray[$key]=$(( ${IPArray[$key]} & ${MaskArray[$key]} ))
Start=$(( $Start + (${NetArray[$key]} << (3-$key)*8) ))
done
IFS=
echo "Your IP Address : $IP"
echo "Your N/W Mask : $Mask"
echo "Your N/W Address : ${NetArray[@]}"
echo "IPs to be Checked : $(( $Max - $Start ))"
for ((IPs=$Start; IPs <= $Max; IPs++))
do
IP=$(( IPs >> 24 ))
IP="$IP.$(( (IPs >> 16) & 255 ))"
IP="$IP.$(( (IPs >> 8) & 255 ))"
IP="$IP.$(( IPs & 255 ))"
$(ping -c 1 -w 1 $IP >& /dev/null)
if [[ $? -eq 0 ]]; then
echo "$IP exists in Network. Just $(( $Max - $IPs )) more to go."
fi
done