1
0
Kaynağa Gözat

Загрузить файлы 'ОАиП/2024-25/36гр/Программы/Работы студентов'

u22-26zelensky 4 ay önce
ebeveyn
işleme
4234db9438

+ 51 - 0
ОАиП/2024-25/36гр/Программы/Работы студентов/Дунаев Никита.py

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