56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
import socket
|
|
import ipaddress
|
|
import sys
|
|
import time
|
|
|
|
# Fonction pour tester si un port est ouvert sur une IP donnée
|
|
def check_port(ip, port):
|
|
try:
|
|
# Créer une connexion à l'IP et au port spécifié
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
s.settimeout(0.30) # Timeout après 1 seconde
|
|
result = s.connect_ex((str(ip), port)) # connect_ex retourne 0 si connecté
|
|
return result == 0 # Si la connexion est réussie, le port est ouvert
|
|
except socket.error:
|
|
return False
|
|
|
|
# Fonction principale pour scanner la plage d'IP et vérifier le port
|
|
def scan_ip_range(ip_range, port):
|
|
open_ips = []
|
|
count = 0 # Compteur d'IP avec le port ouvert
|
|
# Générer toutes les adresses IP de la plage
|
|
network = ipaddress.IPv4Network(ip_range)
|
|
|
|
for ip in network.hosts():
|
|
# Afficher l'IP en cours d'analyse sur une seule ligne
|
|
sys.stdout.write(f"Analyse de l'IP {ip}...\r")
|
|
sys.stdout.flush() # Forcer l'affichage immédiat
|
|
|
|
if check_port(ip, port):
|
|
print(f"Port {port} ouvert sur {ip}")
|
|
open_ips.append(str(ip))
|
|
count += 1 # Incrémenter le compteur si le port est ouvert
|
|
else:
|
|
pass # Rien à afficher si le port est fermé
|
|
|
|
# Petit délai pour éviter une surcharge de mise à jour de la ligne
|
|
time.sleep(0.02)
|
|
|
|
return open_ips, count
|
|
|
|
# Paramètres de l'application
|
|
ip_range = '10.0.0.0/22' # Plage d'IP à scanner
|
|
port = 80 # Port à vérifier
|
|
|
|
# Lancer le scan
|
|
open_ips, total_open = scan_ip_range(ip_range, port)
|
|
|
|
# Afficher les résultats
|
|
if open_ips:
|
|
print(f"\nLes IPs avec le port {port} ouvert sont :")
|
|
for ip in open_ips:
|
|
print(ip)
|
|
print(f"\nTotal des IPs avec le port {port} ouvert : {total_open}")
|
|
else:
|
|
print(f"\nAucune IP avec le port {port} ouvert dans la plage {ip_range}.")
|