获取SNMP IP列表

时间:2014-12-04 08:48:45

标签: c# snmp snmpsharpnet

我的网络中有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

1 个答案:

答案 0 :(得分:0)

现在您至少有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);
        });