web-dev-qa-db-fra.com

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

nmap peut-il ré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.

20
Brian

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 la machine- une analyse lisible. La plus ancienne est sortie Grepable (-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 sortie XML (-oX) , mais cela peut être exagéré pour vos besoins.

Vous pouvez soit enregistrer ces sorties dans des fichiers avec -oG, -oX, ou -oA (les deux formats plus la sortie de texte "normale"), ou vous pouvez envoyer l'un ou l'autre directement à stdout: nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'

11
bonsaiviking

Considérez également ce awk one-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
2
Suncatcher

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.

2
Marshall Hallenbeck