Afficher uniquement les adresses IP des machines en ligne avec nmap

19

Je sais comment utiliser nmappour trouver la liste des hôtes actuellement en ligne. Ce que je voudrais faire, c'est obtenir une liste de leurs seules adresses IP, maintenant il affiche des informations supplémentaires telles que

Nmap scan report for 192.168.x.x' and 'Host is up (0.12s latency).

Ce que je voudrais, c'est pouvoir exécuter une nmapcommande, obtenir un document texte des adresses IP qui sont actuellement en ligne.

Est-ce possible?

jasonwryan
la source

Réponses:

33

Ceci est courant:

nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up$/{print $2}'

Aperçu rapide des options et commandes:

  • -ndésactive la résolution de nom inverse, car vous ne voulez que des adresses IP. Sur un réseau local, c'est probablement aussi l'étape la plus lente, donc vous obtenez un bon boost de vitesse.
  • -snsignifie "Ne pas effectuer d'analyse de port". C'est le même que l'ancien, obsolète -sPavec le mnémonique «ping scan».
  • -oG -envoie la sortie "grepable" à stdout, qui est redirigée vers awk.
  • /Up$/ sélectionne uniquement les lignes se terminant par "Up", représentant les hôtes en ligne.
  • {print $2} imprime le deuxième champ séparé par des espaces, qui est l'adresse IP.
bonsaiviking
la source
Pourquoi avoir le $ après /Up? J'ai trouvé que la commande nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up/{print $2}'fournit les mêmes résultats.
Michael
1
@Michael C'est juste un niveau de sécurité supplémentaire pour nous assurer que nous n'imprimons pas les ordures au cas où quelque chose d'autre contiendrait la chaîne "Up". De cette façon, cela fonctionne même si vous l'exécutez sur une sortie grepable dans un fichier d'un type d'analyse différent, -sVqui peut contenir des chaînes imprévisibles provenant de bannières de service réseau.
bonsaiviking
3

Vous pouvez le diriger vers awk:

nmap -sP 192.168.1.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'
192.168.1.1
192.168.1.10
192.168.1.20
192.168.1.30
jasonwryan
la source