I've inherited an application that receives traps and performs certain system actions based on them. It works great on Windows 7/8/Server2008/Server2012. It can send and receive responses to get and set requests but doesn't receive traps on Windows 10.
The app is using .Net 4.0 and SharpSNMP v 8.0.0. I've updated the app to .Net 4.6.1 and SharpSNMP 9.0.5 hoping this was a previously fixed bug with the 8.0 release and Windows 10.
I've used Wireshark to confirm that the SNMP traps are reaching the system. The Windows SNMPTrap service is disabled.
Has anyone else had a similar issue with Windows 10? Is there something that I need to do differently?
Code snippet that sets up the trap listener.
var get = new OctetString("public");
var set = new OctetString("private");
var store = new ObjectStore();
var v1 = new Version1MembershipProvider(get, set);
var v2 = new Version2MembershipProvider(get, set);
var v3 = new Version3MembershipProvider();
var composed = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
var trapV1Handler = new TrapV1MessageHandler();
var trapV2Handler = new TrapV2MessageHandler();
var informHandler = new InformRequestMessageHandler();
trapV1Handler.MessageReceived += V1MessageHandler_MessageReceived;
trapV2Handler.MessageReceived += V2TrapHandler_MessageReceived;
informHandler.MessageReceived += WatcherInformRequestReceived;
var trapV1 = new HandlerMapping("v1", "TRAPV1", trapV1Handler);
var trapV2 = new HandlerMapping("v2,v3", "TRAPV2", trapV2Handler);
var allV3 = new HandlerMapping("v3", "*", new V3Handler());
var inform = new HandlerMapping("v2", "INFORM", informHandler);
var messageFactory = new MessageHandlerFactory(new[] { trapV1, trapV2, inform, allV3 });
var users = new List<User>();
<!-- User info redacted -->
var userRegistry = new UserRegistry(users.ToArray());
var listener = new Listener();
listener.Users = userRegistry;
// Special handler for SNMPv3 Traps
listener.MessageReceived += FrontLineMessageHandler;
var factory = new SnmpApplicationFactory(store, composed, messageFactory);
_engine = new SnmpEngine(factory, listener, new EngineGroup());
_engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, 162));
_engine.Listener.AddBinding(new IPEndPoint(IPAddress.IPv6Any, 162));
_engine.Start();
_logger.Info("Started SNMP engine");