#!/usr/bin/env python3
"""
Анализ результатов полного сканирования подсети
"""
import json
from pathlib import Path

ANALYSIS_DIR = Path('/root/ir-assessment/redteam/irelydata/analysis')
SCAN_FILE = ANALYSIS_DIR / 'subnet_full_scan.txt'

print("=== АНАЛИЗ ПОЛНОГО СКАНИРОВАНИЯ ПОДСЕТИ 74.208.53.0/24 ===\n")

# Парсим результаты сканирования (grepable format)
hosts_data = {}

with open(SCAN_FILE, 'r') as f:
    for line in f:
        line = line.strip()
        
        if line.startswith('Host:'):
            # Формат: Host: IP (hostname)	Status: Up/Ports: ...
            parts = line.split('\t')
            host_part = parts[0]  # Host: IP (hostname)
            
            # Извлекаем IP и hostname
            host_info = host_part.replace('Host: ', '')
            if '(' in host_info:
                ip = host_info.split()[0]
                hostname = host_info.split('(')[1].replace(')', '').strip()
                if not hostname:
                    hostname = None
            else:
                ip = host_info.strip()
                hostname = None
            
            # Инициализируем хост если новый
            if ip not in hosts_data:
                hosts_data[ip] = {
                    'ip': ip,
                    'hostname': hostname,
                    'ports': {}
                }
            
            # Парсим порты если есть
            if len(parts) > 1 and 'Ports:' in parts[1]:
                ports_str = parts[1].replace('Ports: ', '')
                # Формат: 80/open/tcp//http///, 443/open/tcp//https///
                for port_info in ports_str.split(', '):
                    if port_info.strip():
                        port_parts = port_info.split('/')
                        if len(port_parts) >= 4:
                            port = port_parts[0] + '/tcp'
                            state = port_parts[1]
                            service = port_parts[3] if len(port_parts) > 3 else ''
                            hosts_data[ip]['ports'][port] = {
                                'state': state,
                                'service': service
                            }

hosts_data = list(hosts_data.values())

print(f"Всего хостов: {len(hosts_data)}")

# Находим интересные хосты
print("\n=== ИНТЕРЕСНЫЕ ХОСТЫ ===\n")

# 1. Хосты с открытым RDP
rdp_hosts = [h for h in hosts_data if h['ports'].get('3389/tcp', {}).get('state') == 'open']
print(f"1. Хосты с открытым RDP (3389): {len(rdp_hosts)}")
for h in rdp_hosts:
    ports_open = [p for p, data in h['ports'].items() if data['state'] == 'open']
    print(f"   {h['ip']} ({h['hostname'] or 'no hostname'}) - открытые порты: {', '.join(ports_open)}")

# 2. Хосты с открытым MSSQL
mssql_hosts = [h for h in hosts_data if h['ports'].get('1433/tcp', {}).get('state') == 'open']
print(f"\n2. Хосты с открытым MSSQL (1433): {len(mssql_hosts)}")
for h in mssql_hosts:
    print(f"   {h['ip']} ({h['hostname'] or 'no hostname'})")

# 3. Хосты с необычными конфигурациями (закрытые стандартные порты)
unusual_hosts = [h for h in hosts_data if 
                 h['ports'].get('1433/tcp', {}).get('state') == 'closed' and
                 h['ports'].get('3389/tcp', {}).get('state') == 'closed']
print(f"\n3. Хосты с закрытыми MSSQL и RDP: {len(unusual_hosts)}")
for h in unusual_hosts:
    ports_open = [p for p, data in h['ports'].items() if data['state'] == 'open']
    if ports_open:
        print(f"   {h['ip']} ({h['hostname'] or 'no hostname'}) - открытые порты: {', '.join(ports_open)}")

# 4. Интересные hostname
interesting_keywords = ['mail', 'mssql', 'sql', 'db', 'database', 'fifty21', 'i21', 'irely']
interesting_hostname = [h for h in hosts_data if 
                        h['hostname'] and 
                        any(kw in h['hostname'].lower() for kw in interesting_keywords)]
print(f"\n4. Хосты с интересными hostname: {len(interesting_hostname)}")
for h in interesting_hostname:
    print(f"   {h['ip']} - {h['hostname']}")

# Сохраняем анализ
analysis_result = {
    'total_hosts': len(hosts_data),
    'rdp_hosts': [{'ip': h['ip'], 'hostname': h['hostname'], 'ports': h['ports']} for h in rdp_hosts],
    'mssql_hosts': [{'ip': h['ip'], 'hostname': h['hostname'], 'ports': h['ports']} for h in mssql_hosts],
    'unusual_hosts': [{'ip': h['ip'], 'hostname': h['hostname'], 'ports': h['ports']} for h in unusual_hosts],
    'interesting_hostname': [{'ip': h['ip'], 'hostname': h['hostname'], 'ports': h['ports']} for h in interesting_hostname]
}

with open(ANALYSIS_DIR / 'subnet_analysis_detailed.json', 'w') as f:
    json.dump(analysis_result, f, indent=2)

print(f"\nРезультаты сохранены в subnet_analysis_detailed.json")
