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