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