2010-09-22 5 views
15

Je suis nouveau script bash et je suis en train de faire ce travail:Comment déterminer quelles adresses IP dans une plage donnée ont le port 80 en utilisant nmap?

Numérisation d'une plage d'adresses IP pour trouver des appareils avec le port 80 ouvert ... Je pense qu'il doit ressembler à ceci:

#!/bin/bash 
echo ----------------------------------- 
for ip in 192.168.0.{1,.255}; do 
nmap -p80 192.168.0.1 
     if #open; then 
      echo "{ip} has the port 80 open" 
     else 
      #do nothing 
fi 
done 
echo ----------------------------------- 
exit 0 

aussi je veux juste voir les résultats comme celui-ci:

----------------------------------- 
192.168.0.1 has the port 80 open 
192.168.0.10 has the port 80 open 
192.168.0.13 has the port 80 open 
192.168.0.15 has the port 80 open 
----------------------------------- 

(donc sans erreurs ou nmap de sorties normales ..)

Quelqu'un peut-il m'aider pour ça?

+1

Vous pouvez le faire sans écrire un script shell. 'nmap' prend en charge les plages d'adresses et l'analyse de port spécifique, à la fois en tant qu'arguments de ligne de commande. Consultez la page de manuel ou la documentation sur 'nmap.org'. –

+1

Vous devez utiliser les options nmap pour faire ce que vous voulez. Cependant, voici une petite syntaxe d'aide: 'pour ip dans 192.168.0. {1,255}' (sans le point supplémentaire) vous donnera 192.168.0.1 et 192.168.0.255 * seulement *. Si vous voulez la gamme de 1 à 255 inclus, faites ceci: 'pour ip dans 192.168.0. {1..255}' alors votre commande 'nmap' utiliserait cette variable:' nmap -p80 "$ ip" ' –

Répondre

36

nmap est livré avec un joli paramètre de sortie -oG (sortie grepable) qui rend l'analyse plus facile. De même, il n'est pas nécessaire de parcourir toutes les adresses IP que vous souhaitez analyser. nmap est conscient de netmask.

Votre exemple peut être écrit comme:

nmap -p80 192.168.0.0/24 -oG - | grep 80/open 

Le -oG permet à la sortie grepable et - spécifie le fichier à la sortie (dans ce cas stdout). Le symbole de canal redirige la sortie de nmap (stdout) vers grep, qui renvoie uniquement les lignes contenant 80/open dans ce cas.

+0

Merci pour vos réponses ... Je n'ai malheureusement pas de sortie avec votre code ... Je viens d'obtenir ces lignes (dans un script shell): mass_dns: avertissement: Impossible d'ouvrir /etc/resolv.conf. Essayez d'utiliser - system-dns ou spécifiez des serveurs valides avec les serveurs --dns mass_dns: warning Impossible de déterminer les serveurs DNS. Le DNS inverse est désactivé. Essayez d'utiliser --system-dns ou spécifiez des serveurs valides avec --dns-servers Et les mêmes lignes mais avec une sortie dans un terme. Problème est que je veux garder l'adresse IP de l'appareil avec le port ouvert dans un var ... – bananah

+0

Votre '/ etc/resolv.conf' est configuré correctement, disons qu'il contient au moins un serveur DNS valide? Essayez d'utiliser le commutateur '-n' de nmap, pour désactiver de façon permanente toutes les recherches DNS (inverses). Que voulez-vous dire exactement par garder l'adresse IP de l'appareil dans une variable? Que vis-tu? –

9

Essayez cette

nmap --open -p80 192.168.0.* 

Le --open sera seul hôte de liste avec le port 80 ouvert. De cette façon, vous n'avez pas besoin d'enregistrer votre script shell car le filtrage est déjà effectué par nmap lui-même.

https://nmap.org/book/man-briefoptions.html

+0

Cela a fonctionné pour moi où l'autre réponse n'a pas. –

Questions connexes