Snmp 如何使用C#启用/禁用Cisco Catalyst 2960中的端口? 我刚毕业,刚在香港当了一名程序员。正如本主题所述,我需要使用C#来控制Cisco交换机上的端口

Snmp 如何使用C#启用/禁用Cisco Catalyst 2960中的端口? 我刚毕业,刚在香港当了一名程序员。正如本主题所述,我需要使用C#来控制Cisco交换机上的端口,snmp,cisco,Snmp,Cisco,我已经搜索和学习了相当长的时间,所以我有关于SNMP和MIB的基本知识。我可以找到一些关于如何管理cisco交换机的文章,但没有一篇文章指定如何启用和禁用端口。此时,我想我需要配置交换机,以便它启用SNMP服务,然后我应该发送一个SNMP设置数据包来打开/关闭特定端口。对吗 有谁对此有经验并愿意与我分享吗?请留下一些建议。如果你以前读过一些有用的网站,请把网址留在这里,这样我也可以看看 非常感谢您的关注。我知道三种方法(我最喜欢第一种): 选项1: 一种常见的方法是自动telnet(或自动ssh

我已经搜索和学习了相当长的时间,所以我有关于SNMP和MIB的基本知识。我可以找到一些关于如何管理cisco交换机的文章,但没有一篇文章指定如何启用和禁用端口。此时,我想我需要配置交换机,以便它启用SNMP服务,然后我应该发送一个SNMP设置数据包来打开/关闭特定端口。对吗

有谁对此有经验并愿意与我分享吗?请留下一些建议。如果你以前读过一些有用的网站,请把网址留在这里,这样我也可以看看

非常感谢您的关注。

我知道三种方法(我最喜欢第一种):

选项1:
一种常见的方法是自动telnet(或自动ssh)发送适当的命令。IOS在大多数情况下都是相当标准化的,并且通过这种方式工作得相当好-
TCL的软件包非常适合这种情况。。。我想有一个C#实现

如果您已经熟悉IOS语法,那么这种方法最有效

选项2:
这可能就是您想要的:
IF-MIB::可通过SNMP写入 (以下是使用NET-SNMP的示例):

接口向上:
snmpset-v1-c社区主机名IF-MIB::ifAdminStatus.interface i 1

接口关闭:
snmpset-v1-c社区主机名IF-MIB::ifAdminStatus.interface i 2

(如果“interface”是表示接口的数字,则该值在同一MIB中可用-继续浏览以查找接口值和说明。)

(同样,你可以利用snmpset的C#实现……以及 您必须事先在设备上配置SNMP社区。)

选项3:
可以使用SNMP通过TFTP服务器上传或下载配置。
这有时用于以下顺序:
1.下载运行配置
2.更改该配置
3.上传配置

4.将上传的配置复制到正在运行的配置中(覆盖设备上的活动配置)

您可以使用telnet程序,通过这种方式使用google“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()));
                }
            }

我希望这个答案是有用的,可以帮助您,

我发现对于几个POE交换机(cisco和zyxel),用于操纵POE状态的snmp字符串是

SNMPv2 SMI::mib-2.105.1.1.1.3.1.x x为所需端口(对于8端口交换机1~8,对于24端口交换机1~24)

提到的IF-MIB::ifAdminStatus.interface仅用于启用/禁用端口,但主要目标是重置或降低夜间/周末的电源成本 在具有数十个/数百个接入点/VoIP电话的环境中,这可以节省大量能源

停止端口上POE的命令为

snmpset-v2c-c setcomunity主机SNMPv2 SMI::mib-2.105.1.1.1.3.1.x i2

在端口上启动POE的命令为

snmpset-v2c-c setcomunity主机SNMPv2 SMI::mib-2.105.1.1.1.3.1.x i 1


如果您使用版本3,还需要身份验证

谢谢,您的信息非常有用。我现在要研究它们。你是对的,我想第二种选择可能就是我所想的。但正如你建议的第一个,我要试试PI已尝试启用telnet连接并成功连接到交换机。因此,编写一个C#程序来进行端口交换将非常简单。谢谢你的选择。此外,我的老板仍然想在这个问题上使用SNMP,所以我现在要尝试选项2。因此,1.3.6.1.2.1.2.2.1.7是目标OID,它是单个整型值。但是我总共有24个端口(FastEthernet 1-24),所以应该有24个值和OID吗?是的,请查看我在答案中包含的链接(您可能需要谷歌snmpwalk)>