Nmap peut-il afficher uniquement les hôtes avec des ports spécifiques ouverts?

18

Peut nmaprépertorier tous les hôtes du réseau local qui ont à la fois SSH et HTTP ouverts? Pour ce faire, je peux exécuter quelque chose comme:

nmap 192.168.1.1-254 -p22,80 --open

Cependant, cela répertorie les hôtes qui ont des ports de liste ouverts, alors que je voudrais que les hôtes aient TOUS les ports ouverts. De plus, la sortie est assez verbeuse:

# nmap 192.168.1.1-254 -p22,80 --open

Starting Nmap 6.47 ( http://nmap.org ) at 2015-12-31 10:14 EST
Nmap scan report for Wireless_Broadband_Router.home (192.168.1.1)
Host is up (0.0016s latency).
Not shown: 1 closed port
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for new-host-2.home (192.168.1.16)
Host is up (0.013s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 254 IP addresses (7 hosts up) scanned in 3.78 seconds

Ce que je recherche, c'est simplement une sortie comme:

192.168.1.16

car l'hôte ci-dessus est le seul avec TOUS les ports ouverts.

Je peux certainement post-traiter la sortie, mais je ne veux pas me fier au format de sortie de nmap, je préfère que nmap le fasse, s'il y a un moyen.

Brian
la source
Si vous souhaitez tester un seul port, 'nmap -p 22 | grep -B3 open 'est un moyen simple.
Luciano Andress Martini

Réponses:

10

Il n'y a aucun moyen de le faire dans Nmap, mais votre commentaire sur le fait de ne pas vouloir "s'appuyer sur le format de sortie de nmap" me permet de souligner que Nmap a deux formats de sortie stables pour une analyse lisible par machine. Le plus ancien est Grepable output ( -oG) , qui fonctionne bien pour le traitement avec perl, awk et grep, mais il manque certaines des sorties les plus avancées (comme la sortie du script NSE, les raisons du port, traceroute, etc.). Le format le plus complet est la sortie XML ( -oX) , mais il peut être excessif pour vos besoins.

Vous pouvez enregistrer ces sorties vers des fichiers avec -oG, -oXou -oA( les deux formats ainsi que la sortie de texte « normal »), ou vous pouvez envoyer directement l'un à stdout:nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'

bonsaiviking
la source
1
C'est parfait, juste ce que je cherchais (le -oG -)
Brian
2

Pensez aussi à ce awkone-liner:

nmap -Pn -oG -p22,80,443,445 - 100.100.100.100 | awk '/open/{ s = ""; for (i = 5; i <= NF-4; i++) s = s substr($i,1,length($i)-4) "\n"; print $2 " " $3 "\n" s}'

Il vous imprimera tous les hôtes avec tous les ports ouverts spécifiés comme ceci:

 100.100.100.100 (some-domain.com)
 22/open/tcp//ssh
 80/open/tcp//http
 443/open/tcp//microsoft-ds
 445/open/tcp//https-alt
Suncatcher
la source
Vous devez avoir ajouté -p après l'avoir testé. Le '-' sur la ligne de commande appartient juste après -oG
Wayne
1

Essayez la commande suivante:

nmap --open -p 22,80 192.168.1.1-254 -oG - | grep "/open" | awk '{ print $2 }'

Cela recherchera vos ports dans votre plage et dirigera la sortie au format greppable à la recherche de ports ouverts, puis imprimera les adresses IP qui correspondent à l'un de ces critères.

Marshall Hallenbeck
la source
Bienvenue chez U&L! Notez que la réponse acceptée d'il y a environ 3 ans a une version plus simple de cela où il utilise awk pour grep et imprimer.
Jeff Schaller
1
Je dirais que le mien est meilleur car vous n'avez pas à ajouter de données supplémentaires pour plus de ports au-delà de l'option de port. Son nécessite que vous mettiez également à jour votre awk avec chaque port, ce qui est inutilement détaillé.
Marshall Hallenbeck