# -*- coding: utf-8 -*-
import subprocess
import sys

def probar_comando(cmd, descripcion):
    print(f"\n--- Probando: {descripcion} ---")
    print(f"Comando: {cmd}")
    try:
        salida = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, timeout=15).decode('latin-1')
        lineas = salida.splitlines()
        if "Timeout" in salida:
            print("Resultado: FALLO (Timeout)")
        else:
            print(f"Resultado: EXITO ({len(lineas)} lineas recibidas)")
            if len(lineas) > 0:
                print(f"Muestra: {lineas[0][:80]}...")
    except subprocess.TimeoutExpired:
        print("Resultado: FALLO (Timeout forzado por el script)")
    except subprocess.CalledProcessError as e:
        print(f"Resultado: FALLO (Error de ejecucion: {e.output.decode('latin-1').strip()})")

def main():
    if len(sys.argv) < 3:
        print("Uso: python3 diagnostico_snmp.py <IP> <COMUNIDAD>")
        sys.exit(1)
        
    ip = sys.argv[1]
    comm = sys.argv[2]
    oid = "1.3.6.1.2.1.31.1.1.1.1" # OID de Interfaces que te da problema
    
    print(f"INICIANDO DIAGNOSTICO SNMP HACIA {ip}")
    
    probar_comando(f"snmpwalk -v2c -c {comm} -t 5 {ip} {oid}", "1. Walk Estandar (Lento pero seguro)")
    probar_comando(f"snmpbulkwalk -v2c -c {comm} -t 5 -Cr10 {ip} {oid}", "2. Bulk Walk (Bloques de 10)")
    probar_comando(f"snmpbulkwalk -v2c -c {comm} -t 5 -Cr15 {ip} {oid}", "3. Bulk Walk (Bloques de 20)")
    probar_comando(f"snmpbulkwalk -v2c -c {comm} -t 5 -Cr15 {ip} {oid}", "4. Bulk Walk (Bloques de 50 - El que falla)")

if __name__ == "__main__":
    main()
