2012-02-07 50 views
5

Soy un recién graduado y acabo de conseguir mi primer trabajo como programador en Hong Kong. Como se describe en el tema, necesito usar C# para controlar los puertos en el conmutador de Cisco.¿Cómo puedo habilitar/deshabilitar puertos en Cisco Catalyst 2960 con C#?

Tengo la búsqueda y el estudio desde hace bastante tiempo, así que tengo los conocimientos básicos sobre SNMP y MIB. Puedo encontrar algunos artículos sobre cómo administrar un switch Cisco, pero ninguno de ellos especificó cómo habilitar y deshabilitar los puertos. En este momento, creo que necesito configurar el conmutador para que active el servicio SNMP, luego debería enviar un paquete SNMP Set para activar/desactivar el puerto en particular. ¿Es correcto?

¿Alguien tiene algo de experiencia y me gusta compartir conmigo? Por favor deja alguna sugerencia. Y si ha leído algunos sitios web útiles antes, por favor amablemente deje la URL aquí para que pueda echar un vistazo también.

Muchas gracias por su atención.

Respuesta

7

sé tres métodos (soy más aficionado a la primera):

Opción 1:
Una forma común de acercarse a algo como esto es telnet automatizado (o ssh automatizado) para enviar los comandos apropiados . IOS es bastante estandarizado en su mayor parte y funciona bastante bien de esta manera:
El paquete Expect de TCL es perfecto para este tipo de cosas ... Imagino que hay una implementación de C#.

Esto funciona mejor si ya está familiarizado con la sintaxis de IOS.

Opción 2:
Esto es probablemente lo que quiere:
IF-MIB :: ifAdminStatus es modificable a través de SNMP (Aquí hay un ejemplo usando NET-SNMP):

interfaz UP:
snmpset -v1 -c nombre de host comunidad IF-MIB :: ifAdminStatus.interface i 1

interfaz ABAJO:
snmpset -v1 -c comunidad nombre de host IF-MIB :: i ifAdminStatus.interface 2

(Donde 'interfaz' es un dígito que representa una interfaz, el valor está disponible en la misma MIB hacer un paseo por 1.3.6.1.2.1.2.2.1.2 para encontrar los valores de la interfaz y descripciones.)

(Una vez más no es probable ser una aplicación de C# snmpset puede aprovechar ... y debe configurar las comunidades SNMP en el dispositivo de antemano)

Opción 3:.
es posible utilizar SNMP para trigger un proceso de carga o descarga de config a través de un servidor TFTP.
Esto se utiliza a veces en esta secuencia: 1.
descarga en ejecución config
2. alterar esa configuración
3. carga config
4.copiar la configuración subido a la configuración en ejecución (sobrescribe lo que es activa en el dispositivo)

+0

Gracias Niall, su información es muy útil. Voy a estudiar sobre ellos ahora. Tienes razón, creo que la segunda opción es probablemente en lo que estoy pensando. Pero como sugirió el primero, voy a intentarlo. : P – tingfungc

+0

Me alegro de ser de ayuda. –

+0

He intentado habilitar la conexión de telnet y conectado correctamente al switch. Entonces, escribir un programa C# para hacer el cambio de puerto sería bastante simple. Gracias niall por su option1. Además, mi jefe todavía quiere usar SNMP en este problema, así que voy a probar option2 ahora. Entonces, 1.3.6.1.2.1.2.2.1.7 es el OID de destino y es un valor de tipo entero único. Pero tengo totalmente 24 puertos (FastEthernet 1-24), entonces ¿debería haber 24 valores y OID? – tingfungc

0

Puede utilizar el programa de telnet de esta manera Google "MinimalisticTelnet" y el uso de ejemplo para entender esta solución

Otra forma es el uso de SNMP protocolo, como este ejemplo: Aviso: para el trabajo con SNMP que consigo cambiar y personalizar la biblioteca SnmpSharpNet, y lo llaman en mi programa

using SnmpSharpNet; 

luego escribir el código para desactivar los puertos de 1 a 6: 01

Console.WriteLine("Ports Disabler "); 
      UdpTarget target = new UdpTarget((IPAddress)new IpAddress("192.168.1.200")); 
      Pdu pdu = new Pdu(PduType.Set); 
      pdu.VbList.Add(new Oid("1.3.6.1.2.1.2.2.1.7.1"), new Integer32(2)); 
      pdu.VbList.Add(new Oid("1.3.6.1.2.1.2.2.1.7.2"), new Integer32(2)); 
      pdu.VbList.Add(new Oid("1.3.6.1.2.1.2.2.1.7.3"), new Integer32(2)); 
      pdu.VbList.Add(new Oid("1.3.6.1.2.1.2.2.1.7.4"), new Integer32(2)); 
      pdu.VbList.Add(new Oid("1.3.6.1.2.1.2.2.1.7.5"), new Integer32(2)); 
      pdu.VbList.Add(new Oid("1.3.6.1.2.1.2.2.1.7.6"), new Integer32(2)); 
      AgentParameters aparam = new AgentParameters(SnmpVersion.Ver2, new OctetString("2645")); 
      SnmpV2Packet response; 
      try 
      { 
       // Send request and wait for response 
       response = target.Request(pdu, aparam) as SnmpV2Packet; 
      } 
      catch (Exception ex) 
      { 
       // If exception happens, it will be returned here 
       Console.WriteLine(String.Format("Request failed with exception: {0}", ex.Message)); 
       target.Close(); 
       return; 
      } 
      // Make sure we received a response 
      if (response == null) 
      { 
       Console.WriteLine("Error in sending SNMP request."); 
      } 
      else 
      { 
       // Check if we received an SNMP error from the agent 
       if (response.Pdu.ErrorStatus != 0) 
       { 
        Console.WriteLine(String.Format("SNMP agent returned ErrorStatus {0} on index {1}", 
         response.Pdu.ErrorStatus, response.Pdu.ErrorIndex) + response.ToString()); 
       } 
       else 
       { 
        // Everything is ok. Agent will return the new value for the OID we changed 
        Console.WriteLine(String.Format("Agent response {0}: {1}", 
         response.Pdu[0].Oid.ToString(), response.Pdu[0].Value.ToString())); 
       } 
      } 

Espero que esta respuesta sea útil y le puede ayudar,

1

que he encontrado para varios interruptores POE (Cisco y ZyXEL) que la cadena SNMP para manipular el estado POE es

SNMPv2-SMI :: mib-2.105.1.1.1.3.1.x donde x es el puerto deseado (para un conmutador de 8 puertos 1 ~ 8 para un conmutador de 24 puertos 1 ~ 24)

el mencionado acto IF-MIB :: ifAdminStatus.interface solo para el puerto habilitar/deshabilitar, pero el objetivo principal es restablecer o reducir el costo de energía durante la noche/fin de semana en un entorno con decenas/cientos de puntos de acceso móviles/VoIP esto puede ahorrar mucha energía

el comando para detener POE en el puerto es

snmpset -v -c 2c setcomunity anfitrión SNMPv2-SMI :: MIB-2 2.105.1.1.1.3.1.xi

el comando para iniciar en el puerto POE se

snmpset -v -c 2c setcomunity anfitrión SNMPv2-SMI-MIB :: 2.105.1.1.1.3.1 .xi 1

si utiliza la versión 3 necesitará autenticación también

Cuestiones relacionadas