无法在Windows 11上接收SNMP陷阱

lb3vh1jj  于 2023-02-25  发布在  Windows
关注(0)|答案(1)|浏览(308)

我正在使用.NET 7中的SnmpSharpNet库和C# 10来检索网络中的所有snmp陷阱。代码几乎都是从official documentation复制的,在linux(Ubuntu LTS)上运行没有问题,没有对系统进行任何修改。
在Windows上,我无法捕获SNMP陷阱,这是一个问题,因为我不能调试我的应用程序使用我的电脑。
这是密码

using SnmpSharpNet;
    
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 162);
    EndPoint ep = (EndPoint)ipep;
    socket.Bind(ep);
    // Disable timeout processing. Just block until packet is received
    socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
    bool run = true;
    int inlen = -1;
    while (run)
    {
        byte[] indata = new byte[16 * 1024];
        // 16KB receive buffer int inlen = 0;
        IPEndPoint peer = new IPEndPoint(IPAddress.Any, 0);
        EndPoint inep = (EndPoint)peer;
        try
        {
            inlen = socket.ReceiveFrom(indata, ref inep);
        }
        catch (Exception ex)
        {
            inlen = -1;
        }
        if (inlen > 0)
        {
            // Check protocol version int
            int ver = SnmpPacket.GetProtocolVersion(indata, inlen);
            if (ver == (int)SnmpVersion.Ver1)
            {
                SnmpV1TrapPacket pkt = new SnmpV1TrapPacket();
                pkt.decode(indata, inlen);
                //Do things...
            }
            else
            {
                SnmpV2Packet pkt = new SnmpV2Packet();
                pkt.decode(indata, inlen);
                //Do things...
            }
        }
        else
        {
            if (inlen == 0)
                Trace.WriteLine("Zero length packet received.");
        }
    }

现在,我第一次尝试,我没有改变任何设置在windows 11上,搜索在线,我发现Windows 11不支持SNMP默认情况下,所以我安装了SNMP服务从Settings > Apps > Optional functionalities > Add optional functionality,但代码仍然没有收到任何陷阱。

1wnzp6jl

1wnzp6jl1#

在我编写问题时找到了解决方案,基本上,从Settings > Apps > Optional functionalities > Add optional functionality安装SNMP服务后,Windows自动启动“SNMP service“服务和“SNMP Traps“服务,“SNMP Traps“服务阻止其他服务/应用程序使用端口162,因此我禁用了它,现在代码可以工作。

相关问题