|
@@ -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)
|