Un meilleur moyen de lister les hôtes avec un ensemble spécifique de ports TCP ouverts (Linux)

0

Je souhaite obtenir une liste de tous les hôtes de mon réseau ayant les ports 22, 80 et 443 ouverts ( tous les trois ). Actuellement, j'utilise deux méthodes, les deux ont des inconvénients et je me demande s'il existe un meilleur moyen qui me manque.

1ère méthode :

nmap -PS22 -p22,80,443 192.168.2.\* -oG - | grep "open.*open.*open"
Host: 192.168.2.250 (192.168.2.250) Ports: 22/open/tcp//ssh///, 80/open/tcp//http///, 443/open/tcp//https///

Je dois faire correspondre le nombre de ports avec le nombre d'apparences du mot "open". C'est moche, c'est long et sa sortie est encore plus longue et moche

2ème méthode :

nmap -PS22 -p22,80,443 192.168.2.*
Nmap scan report for 192.168.2.250 (192.168.2.250)
Host is up (0.051s latency).
22/tcp open  ssh
80/tcp open  http
443/tcp open  https

C'est une commande plus simple mais cela nécessite que je localise visuellement les hôtes qui ont 3 lignes de ports ouverts comme dans l'exemple ci-dessus. Dans un réseau comprenant de nombreux hôtes n'ayant qu'un ou deux des trois ports ouverts, c'est difficile.

Une meilleure façon?

Ndemou
la source
3
Votre première commande vous donne exactement ce que vous voulez. Vous avez sûrement besoin de formater la sortie pour qu'elle soit facile à lire. J'aime en ajoutant `| cut -f2 -d \ `pour extraire l'adresse ip.
Paul
si c'était exactement ce dont j'avais besoin, je ne serais pas là pour vous demander un meilleur moyen :-)
ndemou
Pour mieux m'expliquer: votre ajout corrige sûrement mes plaintes au sujet de la sortie longue et laide, mais la commande elle-même est toujours longue et laide (laide, car il faut faire correspondre le nombre de ports au nombre de openmots de la regex et il est facile de l'oublier)
ndemou
Mais pourquoi vous souciez-vous de ce que la commande ressemble? Une fois dans un script, vous pouvez le rendre aussi joli que vous le souhaitez. Si vous utilisez quelque chose comme cela régulièrement, ce n'est pas quelque chose que vous devriez avoir besoin de taper ou de vous rappeler.
Paul
Et voici votre ligne de commande une fois terminé:findports 192.168.2.\* 22 80 443
Paul

Réponses:

2

Les deux sont assez faciles à analyser. Le second comme ça:

nmap -PS22 -p22,80,443 192.168.2.* | awk '/^Nmap scan/ { host = $NF; gsub( /[()]/, "", host) }; /^(22|80|443)/ && $2=="open" { open=open " " $3;  ++cnt}; host && /^$/ { printf "%2s %-20s %s\n", (cnt!=3 ? "!" : "OK"), host, open; host=open=""; cnt=0}'

Cela affichera un indicateur (OK ou!) Dans la 1ère colonne, puis l'adresse IP et enfin les noms des services trouvés.

Gombai Sándor
la source
Merci pour la suggestion. Très bel exemple de la puissance de awk mais je ne vois pas ce qu'il y a de mieux dans votre réponse par rapport à ma première méthode qui, comme je l'ai dit, est laide et longue
ndemou