| 
					
				 | 
			
			
				@@ -0,0 +1,51 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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) 
			 |