我正在使用.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
,但代码仍然没有收到任何陷阱。
1条答案
按热度按时间1wnzp6jl1#
在我编写问题时找到了解决方案,基本上,从
Settings > Apps > Optional functionalities > Add optional functionality
安装SNMP服务后,Windows自动启动“SNMP service
“服务和“SNMP Traps
“服务,“SNMP Traps
“服务阻止其他服务/应用程序使用端口162,因此我禁用了它,现在代码可以工作。