Juste ajouté à la solution de mrjandro quelques améliorations comme la gestion automatique des ressources (en veillant à ce que le socket ouvert soit également fermé), la gestion des délais d'attente, en se débarrassant des erreurs / délais d'attente de connexion simples et l'impression des résultats :
import socket
from contextlib import closing
hosts = ["hôte1", "hôte2", "hôte3"]
port = 22
timeout_en_secondes = 2
hôtes_avec_port_ouvert = []
hôtes_avec_port_fermé = []
hôtes_avec_erreurs = []
def verifier_port(hôte, port, timeout_en_secondes):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout_en_secondes)
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
try:
résultat = sock.connect_ex((hôte, port))
if résultat == 0:
print("Le port {} est *** OUVERT *** sur l'hôte: {}".format(port, hôte))
hôtes_avec_port_ouvert.append(hôte)
else:
print("Le port {} n'est pas ouvert sur l'hôte: {}".format(port, hôte))
hôtes_avec_port_fermé.append(hôte)
except socket.gaierror:
print("La vérification du port {} retourne une *** ERREUR *** réseau sur l'hôte: {}".format(port, hôte))
hôtes_avec_erreurs.append(hôte)
for hôte in hôtes:
verifier_port(hôte, port, timeout_en_secondes)
print("\nHôtes avec un port ouvert:")
print(hôtes_avec_port_ouvert)
print("\nHôtes avec un port fermé:")
print(hôtes_avec_port_fermé)
print("\nHôtes avec des erreurs:")
print(hôtes_avec_erreurs)