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.
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}'
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
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.