C# SNMP 陷阱接收器

本文关键字:接收器 陷阱 SNMP | 更新日期: 2023-09-27 18:20:05

我需要捕获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);

                }

            }

数据以字符串十六进制形式存储,对象 id 的存储方式是否与包含 '."我知道我可以使用现有的库(在网上免费提供(,但我刚刚为自己创造了一个学习的机会。

请指教。

C# SNMP 陷阱接收器

看看

这个SNMP库http://sourceforge.net/projects/snmpsharpnet/files/.

您不必重新发明轮子

C# 中的示例,并使用 SnmpSharpNet VB.Net。点击这里

现在在2019年,我宁愿选择 #SNMP,因为它是基于Nuget包最后发布的日期不断开发的。拥有最新的文档和这篇简洁的文章,其中准确描述了您想要实现的目标。看起来它也与.NET Core一起工作。