我需要捕获SNMP并完成以下代码,我正确获取数据但是objectID出现乱码,是否有任何原因
int port=162;
UdpClient listener;
IPEndPoint groupEP;
byte[] packet = new byte[1024];
int commlength, miblength, datatype, datalength, datastart, Objecttype, Objectlength;
int objectstart;
string objectid;
string output;
Console.WriteLine("Initializing SNMP Listener on Port:" + port + "...");
// try
// {
listener = new UdpClient(port);
groupEP = new IPEndPoint(IPAddress.Any, port);
while (true)
{
Console.WriteLine("Waiting for messages....");
packet = listener.Receive(ref groupEP);
Console.WriteLine("Processing new message...");
if (packet.Length != null)
{
Console.Out.WriteLine("New message from {0} :\n {1}\n", groupEP.ToString(), packet);
if (packet[0] == 0xff)
{
Console.WriteLine("Invalid Packet");
return;
}
commlength = Convert.ToInt16(packet[6]);
miblength = Convert.ToInt16(packet[10 + commlength]);
Objecttype = Convert.ToInt16(packet[30 + commlength + miblength]);
Objectlength = Convert.ToInt16(packet[31 + commlength + miblength]);
objectstart = 32 + commlength + miblength;
datatype = Convert.ToInt16(packet[26+ Objecttype + Objectlength+commlength+ miblength]);
datalength = Convert.ToInt16(packet[27 + Objecttype + Objectlength + commlength + miblength]);
datastart = 28 + Objecttype + Objectlength + commlength + miblength;
output = Encoding.ASCII.GetString(packet, datastart, datalength);
objectid = Encoding.ASCII.GetString(packet, objectstart , Objectlength);
Console.WriteLine("sysLocation - Datatype: {0}, Value: {1}", datatype,output);
Console.WriteLine(objectid);
}
}
数据存储为字符串十六进制,objectid的存储方式与包含'。'的方式相同。 我知道我可以使用现有的图书馆(网上免费提供),但我刚刚创造了一个学习的机会。
请告知。
答案 0 :(得分:2)
看看这个SNMP库 http://sourceforge.net/projects/snmpsharpnet/files/。
你不必重新发明轮子
答案 1 :(得分:1)
带有SnmpSharpNet的C#和VB.Net中的示例。 Click here
答案 2 :(得分:0)
现在在2019年,我宁愿选择#SNMP,因为它是根据Nuget package的最新发布日期不断开发的。拥有最新的docs和简洁的article,准确地描述了您想要实现的目标。看起来也是working with .NET Core。