web-dev-qa-db-fra.com

Comment découvrir les adresses IP dans un réseau avec un script bash?

Est-il possible de déterminer les adresses IP des systèmes d'un réseau à l'aide d'un script bash? Et comment?

6
Tarun

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}')
6
Eric Carvalho

Cette réponse utilise la commande nmappour 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

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 grepname__) dans une variable appelée IPS_UP:

  • nmapest 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 (-).
  • grepne filtre que les lignes contenant le mot "Up" en fin de ligne ("$").
  • awkimprime la deuxième colonne de la liste en sortie de nmapname__, qui correspond à l'adresse IP, et ajoute un espace.
  • La substitution de commande $() 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.

Note
nmappourrait 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 nmapen tant qu’utilisateur root.

7
lgarzo

É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
0
thefourtheye