2012-02-07 55 views
5

我是一名剛畢業的學生,​​剛剛在香港擔任程序員的第一份工作。如上所述,我需要使用C#來控制Cisco交換機上的端口。如何使用C#啓用/禁用Cisco Catalyst 2960中的端口?

我有相當長的時間搜索和學習,所以我有關於SNMP和MIB的基本知識。我可以找到一些關於如何管理Cisco交換機的文章,但是他們中沒有人指定如何啓用和禁用端口。此時我想我需要配置交換機以啓用SNMP服務,然後我應該發送SNMP Set數據包來打開/關閉特定端口。這是對的嗎?

任何人都有一些經驗,並喜歡與我分享?請留下一些建議。如果您之前已閱讀過一些有用的網站,請將網址留在這裏,以便我可以查看。

非常感謝您的關注。

回答

7

我知道的三種方法(我最喜歡第一的):

選項1:
接近這樣的事情是自動遠程登錄(或自動SSH)發送相應的命令的一種常見方式。 IOS在很大程度上是相當標準化的,並且在這種方式下工作得非常好 -
TCL的Expect包非常適合這種事情......我想有一個C#實現。

如果您已經熟悉IOS語法,這種方法效果最佳。

選項2:
這可能是你想要什麼:
IF-MIB :: ifAdminStatus通過SNMP 是可寫的(這裏是使用NET-SNMP爲例):

接口UP:
snmpset -v1 -c社區主機名IF-MIB :: ifAdminStatus.interface I 1

接口DOWN:
snmpset -v1 -c社區主機名IF-MIB :: ifAdminStatus.interface我2

(其中「接口」是表示一個接口一個數字,該值可在同一MIB-做1.3.6.1.2.1.2.2.1.2散步找到接口值和描述。)

(同樣會有可能是C#實現snmpset,你可以利用......和 必須事先在設備上配置的團體)

方案3:
它可以使用SNMP trigger的上傳或下載通過TFTP服務器進行配置。
這有時用在此序列:
1.下載運行的配置
2.改變該配置
3.上傳配置
4。上傳的配置複製到運行配置(覆蓋什麼是活躍在設備上)

+0

謝謝尼爾,你的信息非常有用。我現在要去研究它們。 你說得對,我認爲第二種選擇可能是我正在考慮的。但正如你建議的第一個,我會嘗試。 :P – tingfungc 2012-02-07 08:20:08

+0

很高興能有所幫助。 – 2012-02-07 09:02:45

+0

我試圖啓用telnet連接併成功連接到交換機。所以編寫一個C#程序來做端口切換將非常簡單。感謝尼爾爲您的選擇1。 此外,我的老闆仍然想在這個問題中使用SNMP,所以現在我要試試option2。 所以1.3.6.1.2.1.2.2.1.7是目標OID,它是一個整數類型的值。但是我有24個端口(FastEthernet 1-24),所以應該有24個值和OID? – tingfungc 2012-02-08 04:01:59

0

您可以使用telnet程序這樣谷歌「MinimalisticTelnet」,並使用例如對於理解這個解決方案

另一種方法是使用到SNMP協議如下面的例子: 注意:與SNMP的工作,我得到改變和定製SnmpSharpNet庫,並把它在我的計劃

using SnmpSharpNet; 

用於禁用端口的代碼然後寫1到6:

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())); 
       } 
      } 

我希望這個答案是有用的,可以幫助你,

1

我已經找到了幾個POE交換機(思科和ZYXEL)的SNMP字符串操作POE狀態

的SNMPv2-SMI :: mib-2.105.1.1.1.3.1.x 其中x是所需的端口(對於8端口交換機1〜8用於24端口交換機1〜24)

提到的IF-MIB :: ifAdminStatus.interface act僅用於啓用/禁用端口 - 但主要目標是重置或降低過夜/週末的電源成本 與數十/數百個接入點/ VoIP電話的環境中,這可以節省大量的能源

命令停止POE端口的是

snmpset -v 2C -c setcomunity主機的SNMPv2-SMI :: MIB-2.105.1.1.1.3.1.xi 2

的命令以啓動POE上端口

snmpset -v 2C -c setcomunity主機的SNMPv2-SMI :: MIB-2.105.1.1.1.3.1 .xi 1

如果您使用版本3,您還需要認證