Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# snmp陷阱侦听器无消息接收_C#_Snmp Trap_Sharp Snmp_.net 4.7.1_Snmpsharpnet - Fatal编程技术网

C# snmp陷阱侦听器无消息接收

C# snmp陷阱侦听器无消息接收,c#,snmp-trap,sharp-snmp,.net-4.7.1,snmpsharpnet,C#,Snmp Trap,Sharp Snmp,.net 4.7.1,Snmpsharpnet,因此,我正在构建一个snmp陷阱接收器来接收snmp陷阱消息。 我正在使用lexstudios的sharpsnmp网络包以及github的带有pipline的sample.engine。 我正在创建一个简单的wpf应用程序,以便在屏幕上显示消息,以便在.NET4.7.1中进行测试 所以对于听力部分,我大致使用了示例snmpd public partial class MainWindow : Window { private SnmpEngine _engine;

因此,我正在构建一个snmp陷阱接收器来接收snmp陷阱消息。 我正在使用lexstudios的sharpsnmp网络包以及github的带有pipline的sample.engine。 我正在创建一个简单的wpf应用程序,以便在屏幕上显示消息,以便在.NET4.7.1中进行测试

所以对于听力部分,我大致使用了示例snmpd

public partial class MainWindow : Window
    {
        private SnmpEngine _engine;
        private const string StrAllUnassigned = "All Unassigned";

        public MainWindow()
        {
            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 setv1 = new SetV1MessageHandler();
            var setv1Mapping = new HandlerMapping("v1", "SET", setv1);

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

            var v1 = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));

            var membership = new ComposedMembershipProvider(new IMembershipProvider[] { v1 });
            var handlerFactory = new MessageHandlerFactory(new[]
            {
                getv1Mapping,
                setv1Mapping,
                getnextv1Mapping
            });

            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();

            txtIp.Text = @"162"; //port to receive snmp trap
            cmbIp.Items.Add(StrAllUnassigned);
            foreach (IPAddress address in Dns.GetHostEntry(string.Empty).AddressList.Where(address => !address.IsIPv6LinkLocal))
            {
                cmbIp.Items.Add(address);
            }
            cmbIp.SelectedIndex = 0;


        }

        public void StartListeners()
        {
            try
            {
                _engine.Listener.ClearBindings();
                int port = int.Parse(txtIp.Text, CultureInfo.InvariantCulture);
                /*
                if (cmbIp.Text == StrAllUnassigned)
                {
                    if (Socket.OSSupportsIPv4)
                    {
                        _engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, port));
                    }

                    if (Socket.OSSupportsIPv6)
                    {
                        _engine.Listener.AddBinding(new IPEndPoint(IPAddress.IPv6Any, port));
                    }

                    _engine.Start();
                    if (_engine.Active)
                    {
                        MessageBox.Show("Engine activated");
                    }
                    return;
                }
                */
                IPAddress address = IPAddress.Parse(cmbIp.Text);
                if (address.AddressFamily == AddressFamily.InterNetwork)
                {
                    if (!Socket.OSSupportsIPv4)
                    {
                        MessageBox.Show(Listener.ErrorIPv4NotSupported);
                        return;
                    }

                    _engine.Listener.AddBinding(new IPEndPoint(address, port));
                    _engine.Listener.MessageReceived += Listener_MessageReceived;
                    _engine.Start();
                    if (_engine.Active)
                    {
                        MessageBox.Show("Engine activated");
                    }
                    return;
                }

                if (!Socket.OSSupportsIPv6)
                {
                    MessageBox.Show(Listener.ErrorIPv6NotSupported);
                    return;
                }

                _engine.Listener.AddBinding(new IPEndPoint(address, port));
                _engine.Start();

                

            }
            catch (Exception ex)
            {
                MessageBox.Show("Exception has been thrown in start: " + ex);
            }
        }

        private void Listener_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            MessageBox.Show("message received");
        }

        private void StopListeners()
        {
            _engine.Stop();
            _engine.Dispose();
        }       

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //send trap 
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            Messenger.SendTrapV1(
                new IPEndPoint(ip, 162),
                IPAddress.Loopback, // here should be IP of the current machine.
                new OctetString("public"),
                new ObjectIdentifier(new uint[] { 1, 3, 6 }),
                GenericCode.ColdStart,
                0,
                0,
                new List<Variable>());

        }

        private void Start_Click(object sender, RoutedEventArgs e)
        {            
            try
            {
                StartListeners();
            }
            catch (PortInUseException ex)
            {
                MessageBox.Show(@"Port is already in use: " + ex.Endpoint, @"Error");
            }
        }

        private void stop_Click(object sender, RoutedEventArgs e)
        {
            if (_engine.Active)
            {
                try
                {
                    _engine.Listener.MessageReceived -= Listener_MessageReceived;
                    StopListeners();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("exception in stop: " + ex);
                }
            }
        }
    }
公共部分类主窗口:窗口
{
私人发动机;
private const string StrAllUnassigned=“All Unassigned”;
公共主窗口()
{
var store=new ObjectStore();
Add(新的SysDescr());
Add(新的SysObjectId());
添加(新系统正常运行时间());
添加(新的SysContact());
添加(新的SysName());
添加(新的SysLocation());
添加(新的SysServices());
Add(newsysorlastchange());
Add(newsysortable());
添加(新的IfNumber());
store.Add(新的IfTable());
var users=new UserRegistry();
Add(新的八位字符串(“两者”),DefaultPrivacyProvider.DefaultPair);
Add(新八位字符串(“authen”)、新DefaultPrivacyProvider(新MD5AuthenticationProvider(新八位字符串(“authentication”)));
如果(DesprivacProvider.Isupported)
{
添加(新的八位字符串(“隐私”)、新的DesprivacProvider(新的八位字符串(“隐私短语”),
新的MD5AuthenticationProvider(新的八位字符串(“身份验证”));
}
if(AESPrivacyProviderBase.IsSupported)
{
添加(新的八位字符串(“aes”)、新的AESPrivacyProvider(新的八位字符串(“PrivacyPhase”)、新的MD5AuthenticationProvider(新的八位字符串(“身份验证”));
添加(新八位字符串(“aes192”)、新AES192PrivacyProvider(新八位字符串(“PrivacyPhase”)、新MD5AuthenticationProvider(新八位字符串(“身份验证”));
添加(新八位字符串(“aes256”)、新AES256PrivacyProvider(新八位字符串(“PrivacyPhase”)、新MD5AuthenticationProvider(新八位字符串(“身份验证”));
}
var getv1=新的GetV1MessageHandler();
var getv1Mapping=newhandlermapping(“v1”,“GET”,getv1);
var setv1=新的SetV1MessageHandler();
var setv1Mapping=新的HandlerMapping(“v1”,“SET”,setv1);
var getnextv1=new GetNextV1MessageHandler();
var getnextv1Mapping=新的HandlerMapping(“v1”,“GETNEXT”,getnextv1);
var v1=新版本1MembershipProvider(新的八位字符串(“public”)、新的八位字符串(“public”);
var membership=new ComposedMembershipProvider(new IMembershipProvider[]{v1});
var handlerFactory=newmessagehandlerfactory(new[]
{
getv1映射,
setv1映射,
GetNextV1映射
});
var pipelineFactory=new SnmpApplicationFactory(new RollingLogger(),store,membership,handlerFactory);
_engine=new SnmpEngine(pipelineFactory,新侦听器{Users=Users},新EngineGroup());
_engine.ExceptionRaised+=(发送方,e)=>MessageBox.Show(e.Exception.ToString());
初始化组件();
Text=@“162”//用于接收snmp陷阱的端口
cmbIp.项目.添加(StrAllUnassigned);
foreach(Dns.GetHostEntry(string.Empty).AddressList.Where(address=>!address.IsIPv6LinkLocal)中的IP地址)
{
cmbIp.项目.添加(地址);
}
cmbIp.SelectedIndex=0;
}
公共侦听器()
{
尝试
{
_engine.Listener.ClearBindings();
int port=int.Parse(txtIp.Text,CultureInfo.InvariantCulture);
/*
if(cmbIp.Text==StrAllUnassigned)
{
if(Socket.OSSupportsIPv4)
{
_engine.Listener.AddBinding(新的IPEndPoint(IPAddress.Any,port));
}
if(套接字.OSSupportsIPv6)
{
_engine.Listener.AddBinding(新的IPEndPoint(IPAddress.IPv6Any,port));
}
_发动机起动();
如果(_engine.Active)
{
MessageBox.Show(“引擎已激活”);
}
返回;
}
*/
IPAddress address=IPAddress.Parse(cmbIp.Text);
if(address.AddressFamily==AddressFamily.InterNetwork)
{
如果(!Socket.OSSupportsIPv4)
{
MessageBox.Show(Listener.ErrorIPv4NotSupported);
返回;
}
_engine.Listener.AddBinding(新的IPEndPoint(地址、端口));
_engine.Listener.MessageReceived+=侦听器_MessageReceived;
_发动机起动();
如果(_engine.Active)
{
MessageBox.Show(“引擎已激活”);
}
返回;
}
如果(!Socket.OSSupportsIPv6)
{
MessageBox.Show(Listener.ErrorIPv6NotSupported);
返回;
}
_engine.Listener.AddBinding(新的IPEndPoint(地址、端口));
_发动机起动();
}
捕获(例外情况除外)
{
Show(“在start:+ex中引发了异常”);
}
}
private void Listener_MessageReceived(对象发送方,MessageReceivedEventArgs e)
{