获取 SNMP IP 列表
本文关键字:列表 IP SNMP 获取 | 更新日期: 2023-09-27 18:33:00
我的网络中有 30 台计算机,有五台网络打印机那么我怎么能通过SNMP只找到网络打印机的那五个IP...如果我列出所有IP并使用SNMP,例如
//OctetString community = new OctetString(arg1);
OctetString community = new OctetString("public");
AgentParameters param = new AgentParameters(community);
param.Version = SnmpVersion.Ver1;
//"1.3.6.1.2.1.1.1"
IpAddress agent = new IpAddress(serv1);
//in serv1 i pass my ip
UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 2);
// target.Timeout = 2000;
//target.Retry = 4;
Pdu pdu = new Pdu(PduType.Get);
pdu.VbList.Add("1.3.6.1.2.1.43.10.2.1.4.1.1");//counter
pdu.VbList.Add("1.3.6.1.2.1.43.11.1.1.9.1.1"); //black toner level
pdu.VbList.Add("1.3.6.1.2.1.43.11.1.1.9.1.2"); //Cyan toner level
pdu.VbList.Add("1.3.6.1.2.1.2.2.1.6.1"); //Mac Address
pdu.VbList.Add("1.3.6.1.2.1.1.1.0");
SnmpV1Packet result = (SnmpV1Packet)target.Request(pdu, param);
但是在所有 30 个 IP 中搜索非常慢......那么我怎么能只找到我的网络打印机的那 5 个 IP
现在您至少有 25 个地址不会响应 SNMP。超时为 2 秒和 4 次重试,这意味着等待响应的时间为 250 秒。如果您并行检查所有这些,则(理论上)只需等待 10 秒。您可以通过自己创建线程来执行此操作,但使用内置的并行循环更容易:
List<IPAddress> addresses = new List<IPAddress>()
{
IPAddress.Parse("192.168.1.1"),
IPAddress.Parse("192.168.1.5"),
IPAddress.Parse("192.168.1.10"),
IPAddress.Parse("192.168.1.11"),
};
Parallel.ForEach(addresses, ip =>
{
CheckPrinter(ip);
});
或
Parallel.For(1, 255, i =>
{
CheckPrinter("192.168.1." + i);
});