/
Lazarus-Phoenix
/
PythonEphirNetEcho
Обзор
Документация
Войти
/
Lazarus-Phoenix
/
PythonEphirNetEcho
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
NetAudit.py
51 строка
2 KB
dmitrij
Первый Комит на гитверсе
16 июл 2026, 17:58
16 июл 2026, 17:58
fac3e7f
Код
Авторство
О чём код?
from scapy.all import sniff, IP, DNS, DNSQR from collections import defaultdict import time # Словарь для накопления статистики (наш реестр активов) traffic_stats = defaultdict(lambda: {"bytes": 0, "packets": 0, "domains": set()}) def packet_handler(pkt): if pkt.haslayer(IP): src_ip = pkt[IP].src size = len(pkt) traffic_stats[src_ip]["bytes"] += size traffic_stats[src_ip]["packets"] += 1 # Ловим DNS-запросы (куда стучатся устройства) if pkt.haslayer(DNS) and pkt[DNS].qr == 0 and pkt.haslayer(DNSQR): try: # errors='ignore' спасет от краха на битых пакетах domain = pkt[DNSQR].qname.decode('utf-8', errors='ignore').rstrip('.') traffic_stats[src_ip]["domains"].add(domain) except Exception: pass # ЖЕСТКИЙ ТАЙМ-БОКС: Аудит длится ровно 60 секунд. # Это экономит ресурсы и гарантирует, что скрипт завершится корректно. AUDIT_DURATION = 60 print(f"=== ЗАПУСК АУДИТА СЕТИ НА {AUDIT_DURATION} СЕКУНД ===") print("Идет сбор данных... (Ничего не нажимайте, скрипт остановится сам)\n") # Параметр timeout=60 принудительно вернет управление Python через 60 секунд sniff(prn=packet_handler, store=False, filter="ip", timeout=AUDIT_DURATION) # Блок формирования отчета (сработает автоматически после таймаута) print("\n=== ОТЧЕТ: ТОП ПОТРЕБИТЕЛЕЙ ТРАФИКА ===") print(f"{'IP-адрес':<18} | {'Пакетов':<10} | {'Трафик (KB)':<12} | {'Цели (Домены)'}") print("-" * 90) # Сортируем по убыванию трафика (ищем самых прожорливых) sorted_stats = sorted(traffic_stats.items(), key=lambda x: x[1]["bytes"], reverse=True) for ip, stats in sorted_stats[:10]: kb = stats["bytes"] / 1024 domains = list(stats["domains"])[:3] domains_str = ", ".join(domains) if domains else "Шифрованный трафик / Нет DNS" print(f"{ip:<18} | {stats['packets']:<10} | {kb:<12.2f} | {domains_str}") print("\n[+] Аудит завершен. Данные готовы для анализа и оптимизации OPEX.")