如何使用snmpSharpNet作为代理响应SNMP监视系统

时间:2016-06-22 09:01:00

标签: c# snmp snmpsharpnet

我想构建一个类似SNMP设备的应用程序(如交换机等),使用snmp监控应用程序监控某些项目(如solarwinds,zabbix等)

我使用SNMPsharpNet组件并成功接收Get消息,但我无法响应消息, 看这里:

UdpTarget target = new UdpTarget((IPAddress)new IpAddress(_peerIP.Address),162,5000,3);

nmpV2Packet pkt = new SnmpV2Packet();
try
{
    pkt.decode(_inbuffer, inlen);
}

pkt.Pdu.VbList.RemoveAt(0);

pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.1.0"), new OctetString("Micromoje")); //sysDescr
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.2.0"), new Oid("1.3.6.1.2.1.1.0")); //sysObjectID
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.3.0"), new TimeTicks(2324)); //sysUpTime
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.4.0"), new OctetString("DCU Nodes")); //sysContact
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.5.0"), new OctetString("DCU Managing")); //sysName

AgentParameters aparam = new AgentParameters(SnmpVersion.Ver2, new OctetString("public"));

SnmpV2Packet response = new SnmpV2Packet("public");
response = target.Request(pkt.Pdu, aparam) as SnmpV2Packet;

当我使用此代码时,收到错误消息“请求已达到最大重试次数”。

然后 我试过这段代码:

pkt.Pdu.VbList.RemoveAt(0);

pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.1.0"), new OctetString("Micromoje")); //sysDescr
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.2.0"), new Oid("1.3.6.1.2.1.1.0")); //sysObjectID
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.3.0"), new TimeTicks(2324)); //sysUpTime
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.4.0"), new OctetString("DCU Nodes")); //sysContact
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.5.0"), new OctetString("DCU Managing")); //sysName   


SnmpV2Packet response = new SnmpV2Packet("public"); //= target.Request(pkt.Pdu, aparam) as SnmpV2Packet;
response.Pdu.SetVbList(pkt.Pdu.VbList);
response.Pdu.Type = PduType.Set;

try
{
    byte[] buf = response.encode();
    _socket.SendTo(buf, (EndPoint)_peerIP);
}

当我使用此代码时,我在监控系统端收到错误消息“没有响应提供的读/写社区字符串”

最后我无法将我的应用程序作为SNMP设备连接,测试连接失败,请帮助我,

1 个答案:

答案 0 :(得分:0)

您需要使用相同的RequestId进行回答。而且类型应该是PduType.Response。我更新了您的代码:

int requestId = pkt.Pdu.RequestId;
pkt.Pdu.VbList.RemoveAt(0);

pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.1.0"), new OctetString("Micromoje")); //sysDescr
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.2.0"), new Oid("1.3.6.1.2.1.1.0")); //sysObjectID
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.3.0"), new TimeTicks(2324)); //sysUpTime
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.4.0"), new OctetString("DCU Nodes")); //sysContact
pkt.Pdu.VbList.Add(new Oid("1.3.6.1.2.1.1.5.0"), new OctetString("DCU Managing")); //sysName   


SnmpV2Packet response = new SnmpV2Packet("public"); //= target.Request(pkt.Pdu, param) as SnmpV2Packet;
response.Pdu.SetVbList(pkt.Pdu.VbList);
response.Pdu.Type = PduType.Response;
response.Pdu.RequestId = requestId;

try
{
    byte[] buf = response.encode();
    _socket.SendTo(buf, (EndPoint)_peerIP);
}