2014-12-04 102 views
0

我有我的網絡在30計算機和有五個網絡打印機 憑什麼我發現只有網絡打印機的這五個IP通過SNMP ...如果我列出所有IP 和使用SNMP像獲取SNMP IP列表

//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我的網絡打印機的

+0

可能重複(HTTP:/ /stackoverflow.com/questions/25894554/network-discovery-using-broadcast-snmp-requests) – Jolta 2014-12-04 12:11:34

回答

0

現在你不會給SNMP響應至少25個地址。超時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); 
     }); 
[使用廣播SNMP請求網絡發現]的