import subprocess import time import ipaddress import argparse def ping_ip(ip): try: result = subprocess.run(['ping', '-n', '1', ip], capture_output=True, text=True, check=True, timeout=1) #timeout added to prevent hanging return True # Успешный пинг except subprocess.CalledProcessError: return False # Ошибка пинга except subprocess.TimeoutExpired: return False #Timeout def scan_network(ip_range, timeout = 0.01): try: network = ipaddress.ip_network(ip_range) active_ips = [] for ip in network.hosts(): if ping_ip(str(ip)): active_ips.append(str(ip)) return active_ips except ValueError: print(f"Неверный формат диапазона IP-адресов: {ip_range}") return [] def monitor_network(ip_range, interval): previous_ips = [] while True: current_ips = scan_network(ip_range) new_ips = set(current_ips) - set(previous_ips) lost_ips = set(previous_ips) - set(current_ips) if new_ips: print("Новые соединения:", new_ips) if lost_ips: print("Потерянные соединения:", lost_ips) previous_ips = current_ips time.sleep(0.01) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Мониторинг сети (пингование) и уведомление об изменениях соединений.") parser.add_argument("ip_range", help="Диапазон IP-адресов для сканирования (например, 192.168.1.0/24)") parser.add_argument("interval", type=int, help="Интервал сканирования в секундах") args = parser.parse_args() monitor_network(args.ip_range, args.interval)