Пример #1
0
        public static void Main(string[] args)
        {
            if (args.Length != 0)
            {
                return;
            }

            var users = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                             new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            if (AESPrivacyProviderBase.IsSupported)
            {
                users.Add(new OctetString("aes"), new AESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new AES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new AES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            var trapv1 = new TrapV1MessageHandler();

            trapv1.MessageReceived += WatcherTrapV1Received;
            var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1);

            var trapv2 = new TrapV2MessageHandler();

            trapv2.MessageReceived += WatcherTrapV2Received;
            var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2);

            var inform = new InformRequestMessageHandler();

            inform.MessageReceived += WatcherInformRequestReceived;
            var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

            var store          = new ObjectStore();
            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[] { trapv1Mapping, trapv2Mapping, informMapping });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);

            using (var engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup()))
            {
                engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, 162));
                engine.Start();
                Console.WriteLine("#SNMP is available at https://sharpsnmp.com");
                Console.WriteLine("Press any key to stop . . . ");
                Console.Read();
                engine.Stop();
            }
        }
Пример #2
0
        /// <summary>
        /// Registers a handler to process requests for a specific API route.
        /// </summary>
        /// <param name="name">The name of the API.  Combined with the prefix to construct the path to the API</param>
        /// <param name="handler">The handler that will process the request.</param>
        public void RegisterAPIHandler(string name, object handlerClass)
        {
            if (!name.EndsWith("/"))
            {
                name += "/";
            }

            HandlerMapping mapping = new HandlerMapping(name, handlerClass);

            if (_registeredHandlers.ContainsKey(name))
            {
                mapping = _registeredHandlers[name];
            }

            MethodInfo[] methods = handlerClass.GetType().GetMethods();
            Type         attType = typeof(APIHandlerAttribute);

            foreach (MethodInfo method in methods)
            {
                APIHandlerAttribute att = method.GetCustomAttribute(attType) as APIHandlerAttribute;
                if (att == null)
                {
                    continue;
                }

                mapping.AddMapping(att.Method, att.Name, method);
            }

            _registeredHandlers[name] = mapping;
        }
Пример #3
0
        public void Setup()
        {
            _mapping    = new HandlerMapping(typeof(SmallMessageHandler));
            _serializer = UdpMessagePackSerializer.Instance;
            var _dgram = UdpMessage.Create(new SmallMessage(10), _serializer).ToDgram(_serializer);

            _handler     = new SmallMessageHandler();
            _handlerInfo = new HandlerInfo(_dgram, null, null);
        }
Пример #4
0
        public SnmpPrinterAgent(Action <string> logger)
        {
            this.logger = logger;

            var handlerMappings = new HandlerMapping[] { new HandlerMapping("v1", "GET", new GetV1MessageHandler()) };
            var appFactory      = new SnmpApplicationFactory(SnmpPrinterAgent.printerObjects, new Version1MembershipProvider(UserName, UserName), new MessageHandlerFactory(handlerMappings));

            this.engine = new SnmpEngine(appFactory, new Listener(), new EngineGroup());
        }
Пример #5
0
        public async Task TestTrapV2HandlerWithV2Message()
        {
            var manualEvent = new ManualResetEventSlim();
            // TODO: this is a hack. review it later.
            var users = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
#if !NETSTANDARD
            users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                         new MD5AuthenticationProvider(new OctetString("authentication"))));
#endif
            var count = 0;

            var trapv1        = new TrapV1MessageHandler();
            var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1);

            var trapv2 = new TrapV2MessageHandler();
            trapv2.MessageReceived += (sender, args) =>
            {
                count++;
                manualEvent.Set();
            };
            var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2);

            var inform        = new InformRequestMessageHandler();
            var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

            var store          = new ObjectStore();
            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[] { trapv1Mapping, trapv2Mapping, informMapping });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);
            using (var engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup()))
            {
                var daemonEndPoint = new IPEndPoint(IPAddress.Loopback, port.NextId);
                engine.Listener.AddBinding(daemonEndPoint);
                engine.Start();

                await Messenger.SendTrapV2Async(1, VersionCode.V2, daemonEndPoint, new OctetString("public"), new ObjectIdentifier("1.3.6.1"), 500, new List <Variable>());

                manualEvent.Wait();

                Assert.Equal(1, count);

                engine.Stop();
            }
        }
Пример #6
0
        private async Task ProcessHandles(
            IncomingMessage message,
            HandlerMapping handler,
            string messageText,
            ISlackConnection slackConnection,
            ILogger log)
        {
            foreach (var handle in handler.ValidHandles)
            {
                if (!handle.IsMatch(messageText))
                {
                    continue;
                }

                await foreach (var responseMessage in handler.EvaluatorFunc(message, handle))
                {
                    await SendMessage(
                        responseMessage,
                        slackConnection,
                        log);
                }
            }
        }
        public MainForm()
        {
            // TODO: this is a hack. review it later.
            var store = new ObjectStore();

            store.Add(new SysDescr());
            store.Add(new SysObjectId());
            store.Add(new SysUpTime());
            store.Add(new SysContact());
            store.Add(new SysName());
            store.Add(new SysLocation());
            store.Add(new SysServices());
            store.Add(new SysORLastChange());
            store.Add(new SysORTable());
            store.Add(new IfNumber());
            store.Add(new IfTable());

            var users = new EngineUserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                             new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            if (AESPrivacyProviderBase.IsSupported)
            {
                users.Add(new OctetString("aes"), new AESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new AES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new AES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            var getv1        = new GetV1MessageHandler();
            var getv1Mapping = new HandlerMapping("v1", "GET", getv1);

            var getv23        = new GetMessageHandler();
            var getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23);

            var setv1        = new SetV1MessageHandler();
            var setv1Mapping = new HandlerMapping("v1", "SET", setv1);

            var setv23        = new SetMessageHandler();
            var setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23);

            var getnextv1        = new GetNextV1MessageHandler();
            var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1);

            var getnextv23        = new GetNextMessageHandler();
            var getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23);

            var getbulk        = new GetBulkMessageHandler();
            var getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk);

            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[]
            {
                getv1Mapping,
                getv23Mapping,
                setv1Mapping,
                setv23Mapping,
                getnextv1Mapping,
                getnextv23Mapping,
                getbulkMapping
            });

            var pipelineFactory = new SnmpApplicationFactory(new RollingLogger(), store, membership, handlerFactory);

            _engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup());
            _engine.ExceptionRaised += (sender, e) => MessageBox.Show(e.Exception.ToString());

            InitializeComponent();
            if (PlatformSupport.Platform == PlatformType.Windows)
            {
                // FIXME: work around a Mono WinForms issue.
                Icon = Properties.Resources.network_server;
            }

            toolStripButton1.Image = Properties.Resources.media_playback_start;
            tstxtPort.Text         = @"161";
            tscbIP.Items.Add(StrAllUnassigned);
            foreach (IPAddress address in Dns.GetHostEntry(string.Empty).AddressList.Where(address => !address.IsIPv6LinkLocal))
            {
                tscbIP.Items.Add(address);
            }

            tscbIP.SelectedIndex = 0;
        }
        private async Task BackgroundProcessing(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                using (var scope = _serviceProvider.CreateScope())
                {
                    var repository = scope.ServiceProvider.GetRequiredService <ITrapUsersRepository>();

                    if (await repository.HasNewUsers(_activeTrapUsers, stoppingToken))
                    {
                        _activeTrapUsers = await repository.GetUsers();

                        var ports = _activeTrapUsers.Select(usr => usr.Port).Distinct();
                        var users = new UserRegistry();
                        users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);

                        foreach (var trapUser in _activeTrapUsers)
                        {
                            IPrivacyProvider provider;
                            if (trapUser.EncryptionType == EncryptionType.DES)
                            {
                                provider = new DESPrivacyProvider(
                                    new OctetString(trapUser.Encryption),
                                    new MD5AuthenticationProvider(new OctetString(trapUser.Password)))
                                {
                                    EngineIds = new List <OctetString> {
                                        new OctetString(ByteTool.Convert(trapUser.EngineId))
                                    }
                                };
                            }
                            else
                            {
                                provider = new AESPrivacyProvider(
                                    new OctetString(trapUser.Encryption),
                                    new MD5AuthenticationProvider(new OctetString(trapUser.Password)))
                                {
                                    EngineIds = new List <OctetString> {
                                        new OctetString(ByteTool.Convert(trapUser.EngineId))
                                    }
                                };
                            }

                            users.Add(new OctetString(trapUser.UserName), provider);
                        }

                        var trap = new TrapV2MessageHandler();
                        trap.MessageReceived += TrapMessageReceived;
                        var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trap);

                        //sudo snmptrap -v3 -e 0x090807060504030201 -l authPriv -u snmpro -a MD5 -A STrP@SSWRD -x DES -X STr0ngP@SSWRD 192.168.0.110:162 ''  1.3.6.1.4.1.8072.2.3.0.1 1.3.6.1.4.1.8072.2.3.2.1 s "Example Message"
                        var inform = new InformRequestMessageHandler();
                        inform.MessageReceived += InformMessageReceived;
                        var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

                        var membership = new ComposedMembershipProvider(new IMembershipProvider[]
                        {
                            new Version1MembershipProvider(new OctetString("public"), new OctetString("public")),
                            new Version2MembershipProvider(new OctetString("public"), new OctetString("public")),
                            new Version3MembershipProvider()
                        });

                        var handlerFactory  = new MessageHandlerFactory(new[] { trapv2Mapping, informMapping });
                        var pipelineFactory = new SnmpApplicationFactory(new ObjectStore(), membership, handlerFactory);

                        if (_engine?.Active ?? false)
                        {
                            _engine.Stop();
                            _engine.Dispose();
                        }

                        _engine = new SnmpEngine(pipelineFactory, new Listener {
                            Users = users
                        }, new EngineGroup());

                        foreach (var port in ports)
                        {
                            _engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, port));
                        }

                        _engine.Start();
                    }
                }

                await Task.Delay(5000, stoppingToken);
            }
        }
Пример #9
0
        public static void Init(string ip, string trapMcastIp, int port, int trap)
        {
            SnmpLogger  logger      = new SnmpLogger();
            ObjectStore objectStore = new ObjectStore();

            OctetString getCommunity = new OctetString("public");
            OctetString setCommunity = new OctetString("public");

            IMembershipProvider[] membershipProviders = new IMembershipProvider[]
            {
                new Version1MembershipProvider(getCommunity, setCommunity),
                new Version2MembershipProvider(getCommunity, setCommunity),
                new Version3MembershipProvider()
            };
            IMembershipProvider composedMembershipProvider = new ComposedMembershipProvider(membershipProviders);

            TrapV1MessageHandler        trapv1 = new TrapV1MessageHandler();
            TrapV2MessageHandler        trapv2 = new TrapV2MessageHandler();
            InformRequestMessageHandler inform = new InformRequestMessageHandler();

            HandlerMapping[] handlerMappings = new HandlerMapping[]
            {
                new HandlerMapping("v1", "GET", new GetV1MessageHandler()),
                new HandlerMapping("v2,v3", "GET", new GetMessageHandler()),
                new HandlerMapping("v1", "SET", new SetV1MessageHandler()),
                new HandlerMapping("v2,v3", "SET", new SetMessageHandler()),
                new HandlerMapping("v1", "GETNEXT", new GetNextV1MessageHandler()),
                new HandlerMapping("v2,v3", "GETNEXT", new GetNextMessageHandler()),
                new HandlerMapping("v2,v3", "GETBULK", new GetBulkMessageHandler()),
                new HandlerMapping("v1", "TRAPV1", trapv1),
                new HandlerMapping("v2,v3", "TRAPV2", trapv2),
                new HandlerMapping("v2,v3", "INFORM", inform)                /*,
                                                                              * new HandlerMapping("*", "*", new NullMessageHandler())*/
            };
            MessageHandlerFactory messageHandlerFactory = new MessageHandlerFactory(handlerMappings);

            User[] users = new User[]
            {
                new User(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair),
                new User(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication")))),
                new User(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))))
            };
            UserRegistry userRegistry = new UserRegistry(users);

            EngineGroup engineGroup = new EngineGroup();
            Listener    listener    = new Listener()
            {
                Users = userRegistry
            };
            SnmpApplicationFactory factory = new SnmpApplicationFactory(logger, objectStore, composedMembershipProvider, messageHandlerFactory);

            _engine = new SnmpEngine(factory, listener, engineGroup);
            _engine.Listener.AddBinding(new IPEndPoint(IPAddress.Parse(ip), port));
            _engine.Listener.AddBinding(new IPEndPoint(IPAddress.Parse(ip), trap));
            //			_engine.Listener.AddBinding(new IPEndPoint(IPAddress.Parse(ip), trap), trapMcastIp != null ? IPAddress.Parse(trapMcastIp) : null);
            _engine.ExceptionRaised += (sender, e) => _logger.Error(e.Exception, "ERROR Snmp");

            _closed  = false;
            _store   = objectStore;
            _context = SynchronizationContext.Current ?? new SynchronizationContext();

            trapv1.MessageReceived += TrapV1Received;
            trapv2.MessageReceived += TrapV2Received;
            inform.MessageReceived += InformRequestReceived;

            /*(new IPEndPoint(IPAddress.Parse(ip), 0)).SetAsDefault();*/
        }
Пример #10
0
 public void Cleanup()
 {
     _mapping = null;
 }
        public async Task TestTrapV2HandlerWithV3Message()
        {
            var manualEvent = new ManualResetEventSlim();
            // TODO: this is a hack. review it later.
            var engineId = new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"));
            var users    = new EngineUserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"),
                      new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication")))
            {
                EngineIds = new[] { engineId }
            });
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                             new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            var count = 0;

            var trapv1        = new TrapV1MessageHandler();
            var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1);

            var trapv2 = new TrapV2MessageHandler();

            trapv2.MessageReceived += (sender, args) =>
            {
                count++;
                manualEvent.Set();
            };
            var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2);

            var inform        = new InformRequestMessageHandler();
            var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

            var store          = new ObjectStore();
            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[] { trapv1Mapping, trapv2Mapping, informMapping });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);
            var engine          = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup());
            var daemonEndPoint = new IPEndPoint(IPAddress.Loopback, port.NextId);

            engine.Listener.AddBinding(daemonEndPoint);
            engine.Start();

            try
            {
                var privacy =
                    new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication")));
                var trap = new TrapV2Message(
                    VersionCode.V3,
                    1004947569,
                    234419641,
                    new OctetString("authen"),
                    new ObjectIdentifier("1.3.6"),
                    0,
                    new List <Variable>(),
                    privacy,
                    0x10000,
                    engineId,
                    0,
                    0);
                await trap.SendAsync(daemonEndPoint);

                manualEvent.Wait();

                Assert.Equal(1, count);
            }
            finally
            {
                if (SnmpMessageExtension.IsRunningOnWindows)
                {
                    engine.Stop();
                }
            }
        }
Пример #12
0
        public MainPage()
        {
            ObjectStore store = new ObjectStore();

            store.Add(new SysDescr());
            store.Add(new SysObjectId());
            store.Add(new SysUpTime());
            store.Add(new SysContact());
            store.Add(new SysName());
            store.Add(new SysLocation());
            store.Add(new SysServices());
            store.Add(new SysORLastChange());
            store.Add(new SysORTable());
            store.Add(new IfNumber());
            store.Add(new IfTable());

            UserRegistry users = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                             new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            if (AESPrivacyProviderBase.IsSupported)
            {
                users.Add(new OctetString("aes"), new AESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new AES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new AES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            GetV1MessageHandler getv1        = new GetV1MessageHandler();
            HandlerMapping      getv1Mapping = new HandlerMapping("v1", "GET", getv1);

            GetMessageHandler getv23        = new GetMessageHandler();
            HandlerMapping    getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23);

            SetV1MessageHandler setv1        = new SetV1MessageHandler();
            HandlerMapping      setv1Mapping = new HandlerMapping("v1", "SET", setv1);

            SetMessageHandler setv23        = new SetMessageHandler();
            HandlerMapping    setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23);

            GetNextV1MessageHandler getnextv1        = new GetNextV1MessageHandler();
            HandlerMapping          getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1);

            GetNextMessageHandler getnextv23        = new GetNextMessageHandler();
            HandlerMapping        getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23);

            GetBulkMessageHandler getbulk        = new GetBulkMessageHandler();
            HandlerMapping        getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk);

            Version1MembershipProvider v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            Version2MembershipProvider v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            Version3MembershipProvider v3             = new Version3MembershipProvider();
            ComposedMembershipProvider membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            MessageHandlerFactory      handlerFactory = new MessageHandlerFactory(new[]
            {
                getv1Mapping,
                getv23Mapping,
                setv1Mapping,
                setv23Mapping,
                getnextv1Mapping,
                getnextv23Mapping,
                getbulkMapping
            });

            SnmpApplicationFactory pipelineFactory = new SnmpApplicationFactory(new RollingLogger(), store, membership, handlerFactory);

            _engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup());
            _engine.ExceptionRaised += (sender, e) => DisplayAlert("Exception Raised", e.Exception.ToString(), "OK");

            InitializeComponent();

            IpPicker.Items.Add("All Unassigned");
            foreach (IPAddress address in Dns.GetHostEntry(string.Empty).AddressList.Where(address => !address.IsIPv6LinkLocal))
            {
                IpPicker.Items.Add(address.ToString());
            }
            IpPicker.SelectedItem = IpPicker.Items.FirstOrDefault();
        }
Пример #13
0
        public async Task TestTrapV2HandlerWithV3MessageAndWrongEngineId()
        {
            var manualEvent = new ManualResetEventSlim();
            // TODO: this is a hack. review it later.
            var engineId = new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"));
            var users    = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication")))
            {
                EngineId = engineId
            });
#if !NETSTANDARD
            users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                         new MD5AuthenticationProvider(new OctetString("authentication"))));
#endif
            var count = 0;

            var trapv1        = new TrapV1MessageHandler();
            var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1);

            var trapv2 = new TrapV2MessageHandler();
            trapv2.MessageReceived += (sender, args) => { count++; };
            var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2);

            var inform        = new InformRequestMessageHandler();
            var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

            var store          = new ObjectStore();
            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[] { trapv1Mapping, trapv2Mapping, informMapping });

            var logger = new TestLogger();
            logger.Handler = (obj, args) => { manualEvent.Set(); };

            var pipelineFactory = new SnmpApplicationFactory(logger, store, membership, handlerFactory);
            var group           = new EngineGroup();
            using (var engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, group))
            {
                var daemonEndPoint = new IPEndPoint(IPAddress.Loopback, port.NextId);
                engine.Listener.AddBinding(daemonEndPoint);
                engine.Start();

                var privacy = new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication")));
                var trap    = new TrapV2Message(
                    VersionCode.V3,
                    1004947569,
                    234419641,
                    new OctetString("authen"),
                    new ObjectIdentifier("1.3.6"),
                    0,
                    new List <Variable>(),
                    privacy,
                    0x10000,
                    new OctetString(ByteTool.Convert("80001F8880E9630000D61FF450")),
                    0,
                    0);
                await trap.SendAsync(daemonEndPoint);

                manualEvent.Wait();

                Assert.Equal(0, count);
                Assert.Equal(new Counter32(1), group.UnknownEngineId.Data);

                engine.Stop();
            }
        }
Пример #14
0
        public static void Main(string[] args)
        {
            if (args.Length != 0)
            {
                return;
            }

            var store = new ObjectStore();

            store.Add(new SysDescr());
            store.Add(new SysObjectId());
            store.Add(new SysUpTime());
            store.Add(new SysContact());
            store.Add(new SysName());
            store.Add(new SysLocation());
            store.Add(new SysServices());
            store.Add(new SysORLastChange());
            store.Add(new SysORTable());
            store.Add(new IfNumber());
            store.Add(new IfTable());

            var users = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            if (AESPrivacyProviderBase.IsSupported)
            {
                users.Add(new OctetString("aes"), new AESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new AES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new AES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            var getv1        = new GetV1MessageHandler();
            var getv1Mapping = new HandlerMapping("v1", "GET", getv1);

            var getv23        = new GetMessageHandler();
            var getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23);

            var setv1        = new SetV1MessageHandler();
            var setv1Mapping = new HandlerMapping("v1", "SET", setv1);

            var setv23        = new SetMessageHandler();
            var setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23);

            var getnextv1        = new GetNextV1MessageHandler();
            var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1);

            var getnextv23        = new GetNextMessageHandler();
            var getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23);

            var getbulk        = new GetBulkMessageHandler();
            var getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk);

            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[]
            {
                getv1Mapping,
                getv23Mapping,
                setv1Mapping,
                setv23Mapping,
                getnextv1Mapping,
                getnextv23Mapping,
                getbulkMapping
            });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);

            using (var engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup()))
            {
                engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, 161));
                engine.Listener.ExceptionRaised += Engine_ExceptionRaised;
                engine.Listener.MessageReceived += RequestReceived;
                engine.Start();
                Console.WriteLine("#SNMP is available at https://sharpsnmp.com");
                Console.WriteLine("Press any key to stop . . . ");
                Console.Read();
                engine.Stop();
            }
        }
Пример #15
0
        private const int MaxTimeout = 5 * 60 * 1000; // 5 minutes


        private SnmpEngine CreateEngine(bool timeout = false)
        {
            // TODO: this is a hack. review it later.
            var store = new ObjectStore();

            store.Add(new SysDescr());
            store.Add(new SysObjectId());
            store.Add(new SysUpTime());
            store.Add(new SysContact());
            store.Add(new SysName());
            store.Add(new SysLocation());
            store.Add(new SysServices());
            store.Add(new SysORLastChange());
            store.Add(new SysORTable());
            store.Add(new IfNumber());
            store.Add(new IfTable());
            if (timeout)
            {
                store.Add(new TimeoutObject());
            }

            var users = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                             new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            var getv1        = new GetV1MessageHandler();
            var getv1Mapping = new HandlerMapping("v1", "GET", getv1);

            var getv23        = new GetMessageHandler();
            var getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23);

            var setv1        = new SetV1MessageHandler();
            var setv1Mapping = new HandlerMapping("v1", "SET", setv1);

            var setv23        = new SetMessageHandler();
            var setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23);

            var getnextv1        = new GetNextV1MessageHandler();
            var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1);

            var getnextv23        = new GetNextMessageHandler();
            var getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23);

            var getbulk        = new GetBulkMessageHandler();
            var getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk);

            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[]
            {
                getv1Mapping,
                getv23Mapping,
                setv1Mapping,
                setv23Mapping,
                getnextv1Mapping,
                getnextv23Mapping,
                getbulkMapping
            });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);
            var listener        = new Listener {
                Users = users
            };

            listener.ExceptionRaised += (sender, e) => { Assert.True(false, "unexpected exception"); };
            return(new SnmpEngine(pipelineFactory, listener, new EngineGroup()));
        }
Пример #16
0
        public SnmpClient()
        {
            var store = new ObjectStore();

            store.Add(new SysDescr());
            store.Add(new SysObjectId());
            store.Add(new SysUpTime());
            store.Add(new SysContact());
            store.Add(new SysName());
            store.Add(new SysLocation());
            store.Add(new SysServices());
            store.Add(new SysORLastChange());
            store.Add(new SysORTable());
            store.Add(new IfNumber());
            store.Add(new IfTable());

            var users = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));

            var getv1        = new GetV1MessageHandler();
            var getv1Mapping = new HandlerMapping("v1", "GET", getv1);

            var getv23        = new GetMessageHandler();
            var getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23);

            var setv1        = new SetV1MessageHandler();
            var setv1Mapping = new HandlerMapping("v1", "SET", setv1);

            var setv23        = new SetMessageHandler();
            var setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23);

            var getnextv1        = new GetNextV1MessageHandler();
            var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1);

            var getnextv23        = new GetNextMessageHandler();
            var getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23);

            var getbulk        = new GetBulkMessageHandler();
            var getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk);

            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[]
            {
                getv1Mapping,
                getv23Mapping,
                setv1Mapping,
                setv23Mapping,
                getnextv1Mapping,
                getnextv23Mapping,
                getbulkMapping
            });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);

            _engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup());
            _engine.Listener.MessageReceived += Listener_MessageReceived;

            _engine.ExceptionRaised += (sender, e) =>
            {
                Debugger.Break();
            };
        }
Пример #17
0
        public static void Main(string[] args)
        {
            if (args.Length != 0)
            {
                return;
            }

            var users = new EngineUserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(
                new OctetString("authen"),
                new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(
                    new OctetString("privacy"),
                    new DESPrivacyProvider(
                        new OctetString("privacyphrase"),
                        new MD5AuthenticationProvider(new OctetString("authentication"))));

                // for snmpsendtrap testing
                users.Add(new OctetString("trap"),
                          new DESPrivacyProvider(
                              new OctetString("privacyphrase"),
                              new MD5AuthenticationProvider(new OctetString("authentication")))
                {
                    EngineIds = new List <OctetString> {
                        new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"))
                    }
                });
            }
            else
            {
                Console.WriteLine("DES privacy is not supported by .NET Core natively. Switched to BouncyCastle implementation.");
                users.Add(
                    new OctetString("privacy"),
                    new Samples.BouncyCastle.BouncyCastleDESPrivacyProvider(
                        new OctetString("privacyphrase"),
                        new MD5AuthenticationProvider(new OctetString("authentication"))));

                // for snmpsendtrap testing
                users.Add(new OctetString("trap"),
                          new Samples.BouncyCastle.BouncyCastleDESPrivacyProvider(
                              new OctetString("privacyphrase"),
                              new MD5AuthenticationProvider(new OctetString("authentication")))
                {
                    EngineIds = new List <OctetString> {
                        new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"))
                    }
                });
            }

            if (AESPrivacyProviderBase.IsSupported)
            {
                users.Add(new OctetString("aes"), new AESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new AES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new AES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));

                // for snmpsendtrap testing
                users.Add(new OctetString("trapAES"),
                          new AESPrivacyProvider(
                              new OctetString("privacyphrase"),
                              new MD5AuthenticationProvider(new OctetString("authentication")))
                {
                    EngineIds = new List <OctetString> {
                        new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"))
                    }
                });
            }
            else
            {
                Console.WriteLine("AES privacy is not supported by .NET Core natively. Switched to BouncyCastle implementation.");
                users.Add(new OctetString("aes"), new Samples.BouncyCastle.BouncyCastleAESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new Samples.BouncyCastle.BouncyCastleAES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new Samples.BouncyCastle.BouncyCastleAES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));

                // for snmpsendtrap testing
                users.Add(new OctetString("trapAES"),
                          new Samples.BouncyCastle.BouncyCastleAESPrivacyProvider(
                              new OctetString("privacyphrase"),
                              new MD5AuthenticationProvider(new OctetString("authentication")))
                {
                    EngineIds = new List <OctetString> {
                        new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"))
                    }
                });
            }

            var trapv1 = new TrapV1MessageHandler();

            trapv1.MessageReceived += WatcherTrapV1Received;
            var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1);

            var trapv2 = new TrapV2MessageHandler();

            trapv2.MessageReceived += WatcherTrapV2Received;
            var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2);

            var inform = new InformRequestMessageHandler();

            inform.MessageReceived += WatcherInformRequestReceived;
            var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

            var store          = new ObjectStore();
            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[] { trapv1Mapping, trapv2Mapping, informMapping });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);

            using (var engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup()))
            {
                engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, 162));
                engine.Listener.ExceptionRaised += (sender, e) => Console.WriteLine($"Exception catched: {e.Exception}");
                engine.Start();
                Console.WriteLine("#SNMP is available at https://sharpsnmp.com");
                Console.WriteLine("Press any key to stop . . . ");
                Console.Read();
                engine.Stop();
            }
        }
        public async Task TestInformV2HandlerWithV3MessageDES()
        {
            var manualEvent = new ManualResetEventSlim();
            // TODO: this is a hack. review it later.
            var users = new EngineUserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"),
                      new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(
                    new OctetString("privacy"),
                    new DESPrivacyProvider(
                        new OctetString("privacyphrase"),
                        new MD5AuthenticationProvider(new OctetString("authentication"))));
            }
            else
            {
                users.Add(
                    new OctetString("privacy"),
                    new BouncyCastle.BouncyCastleDESPrivacyProvider(
                        new OctetString("privacyphrase"),
                        new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            var count = 0;

            var trapv1        = new TrapV1MessageHandler();
            var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1);

            var trapv2        = new TrapV2MessageHandler();
            var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2);

            var inform = new InformRequestMessageHandler();

            inform.MessageReceived += (sender, args) =>
            {
                count++;
                manualEvent.Set();
            };
            var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

            var store          = new ObjectStore();
            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[] { trapv1Mapping, trapv2Mapping, informMapping });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);
            var engine          = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup());
            var daemonEndPoint = new IPEndPoint(IPAddress.Loopback, port.NextId);

            engine.Listener.AddBinding(daemonEndPoint);
            engine.Listener.ExceptionRaised += (sender, e) => { Assert.True(false, "unhandled exception"); };
            engine.Listener.MessageReceived += (sender, e) => { Console.WriteLine(e.Message); };
            engine.Start();

            try
            {
                Discovery     discovery = Messenger.GetNextDiscovery(SnmpType.InformRequestPdu);
                ReportMessage report    = discovery.GetResponse(2000, daemonEndPoint);
                await Messenger.SendInformAsync(1,
                                                VersionCode.V3,
                                                daemonEndPoint,
                                                new OctetString("privacy"),
                                                OctetString.Empty,
                                                new ObjectIdentifier("1.3.6.1"),
                                                500,
                                                new List <Variable>(),
                                                DESPrivacyProvider.IsSupported
                                                ?(IPrivacyProvider) new DESPrivacyProvider(
                                                    new OctetString("privacyphrase"),
                                                    new MD5AuthenticationProvider(new OctetString("authentication")))
                                                : new BouncyCastle.BouncyCastleDESPrivacyProvider(
                                                    new OctetString("privacyphrase"),
                                                    new MD5AuthenticationProvider(new OctetString("authentication"))),
                                                report);

                manualEvent.Wait();

                Assert.Equal(1, count);
            }
            finally
            {
                if (SnmpMessageExtension.IsRunningOnWindows)
                {
                    engine.Stop();
                }
            }
        }