public void TestToBytes2() { var privacy = new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))); var trap = new TrapV2Message( VersionCode.V3, 318463383, 1276263065, new OctetString("lextm"), new ObjectIdentifier("1.3.6"), 0, new List <Variable>(), privacy, 0x10000, new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449")), 0, 0 ); Assert.Equal(ByteTool.Convert(File.ReadAllBytes(Path.Combine("Resources", "trapv3auth"))), ByteTool.Convert(trap.ToBytes())); }
public void TestConvertDecimal() { byte[] b = ByteTool.ConvertDecimal(" 16 18 "); Assert.Equal(new byte[] { 0x10, 0x12 }, b); }
public void TestToBytes() { var trap = new TrapV2Message( VersionCode.V3, 528732060, 1905687779, new OctetString("lextm"), new ObjectIdentifier("1.3.6"), 0, new List <Variable>(), DefaultPrivacyProvider.DefaultPair, 0x10000, new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449")), 0, 0 ); Assert.Equal(ByteTool.Convert(File.ReadAllBytes(Path.Combine("Resources", "trapv3"))), ByteTool.Convert(trap.ToBytes())); }
public static void Main(string[] args) { IPAddress address = args.Length == 1 ? IPAddress.Parse(args[0]) : IPAddress.Loopback; Messenger.SendTrapV1( new IPEndPoint(address, 162), IPAddress.Loopback, new OctetString("public"), new ObjectIdentifier(new uint[] { 1, 3, 6 }), GenericCode.ColdStart, 0, 0, new List <Variable>()); //Thread.Sleep(50); Messenger.SendTrapV2( 0, VersionCode.V2, new IPEndPoint(address, 162), new OctetString("public"), new ObjectIdentifier(new uint[] { 1, 3, 6 }), 0, new List <Variable>()); //Thread.Sleep(50); try { Messenger.SendInform( 0, VersionCode.V2, new IPEndPoint(address, 162), new OctetString("public"), new ObjectIdentifier(new uint[] { 1, 3, 6 }), 0, new List <Variable>(), 2000, null, null); } catch (Exception ex) { Console.WriteLine(ex); } try { Discovery discovery = Messenger.GetNextDiscovery(SnmpType.InformRequestPdu); ReportMessage report = discovery.GetResponse(2000, new IPEndPoint(address, 162)); Messenger.SendInform( 0, VersionCode.V3, new IPEndPoint(address, 162), new OctetString("neither"), new ObjectIdentifier(new uint[] { 1, 3, 6 }), 0, new List <Variable>(), 2000, DefaultPrivacyProvider.DefaultPair, report); } catch (Exception ex) { Console.WriteLine(ex); } { var trap = new TrapV2Message( VersionCode.V3, 528732060, 1905687779, new OctetString("neither"), new ObjectIdentifier("1.3.6"), 0, new List <Variable>(), DefaultPrivacyProvider.DefaultPair, 0x10000, new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449")), 0, 0); trap.Send(new IPEndPoint(address, 162)); } { var trap = new TrapV2Message( VersionCode.V3, 528732060, 1905687779, new OctetString("privacy"), new ObjectIdentifier("1.3.6"), 0, new List <Variable>(), new DESPrivacyProvider( new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))), 0x10000, new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449")), 0, 0); trap.Send(new IPEndPoint(address, 162)); } }
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 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++; 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(); 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); engine.Stop(); } }
public void TestEncrypt2() { byte[] expected = ByteTool.Convert("04 30 4B 4F 10 3B 73 E1 E4 BD 91 32 1B CB 41" + "1B A1 C1 D1 1D 2D B7 84 16 CA 41 BF B3 62 83 C4" + "29 C5 A4 BC 32 DA 2E C7 65 A5 3D 71 06 3C 5B 56" + "FB 04 A4"); OctetString engineId = new OctetString(ByteTool.Convert("80 00 1F 88 80 E9 63 00 00 D6 1F F4 49")); IPrivacyProvider priv; if (DESPrivacyProvider.IsSupported) { priv = new DESPrivacyProvider(new OctetString("passtest"), new MD5AuthenticationProvider(new OctetString("testpass"))); } else { priv = new BouncyCastle.BouncyCastleDESPrivacyProvider(new OctetString("passtest"), new MD5AuthenticationProvider(new OctetString("testpass"))); } Scope scope = new Scope(engineId, OctetString.Empty, new GetRequestPdu(0x3A25, new List <Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.3.0")) })); SecurityParameters parameters = new SecurityParameters(engineId, new Integer32(0x14), new Integer32(0x35), new OctetString("lexmark"), new OctetString(new byte[12]), new OctetString(ByteTool.Convert("00 00 00 01 44 2C A3 B5"))); ISnmpData data = priv.Encrypt(scope.GetData(VersionCode.V3), parameters); Assert.Equal(SnmpType.OctetString, data.TypeCode); Assert.Equal(ByteTool.Convert(expected), ByteTool.Convert(data.ToBytes())); }
public static void Main(string[] args) { string community = "public"; bool showHelp = false; bool showVersion = false; VersionCode version = VersionCode.V2; // GET BULK is available in SNMP v2 and above. int timeout = 1000; int retry = 0; Levels level = Levels.Reportable; string user = string.Empty; string authentication = string.Empty; string authPhrase = string.Empty; string privacy = string.Empty; string privPhrase = string.Empty; int maxRepetitions = 10; int nonRepeaters = 0; bool dump = false; OptionSet p = new OptionSet() .Add("c:", "Community name, (default is public)", delegate(string v) { if (v != null) { community = v; } }) .Add("l:", "Security level, (default is noAuthNoPriv)", delegate(string v) { if (v.ToUpperInvariant() == "NOAUTHNOPRIV") { level = Levels.Reportable; } else if (v.ToUpperInvariant() == "AUTHNOPRIV") { level = Levels.Authentication | Levels.Reportable; } else if (v.ToUpperInvariant() == "AUTHPRIV") { level = Levels.Authentication | Levels.Privacy | Levels.Reportable; } else { throw new ArgumentException("no such security mode: " + v); } }) .Add("Cn:", "Non-repeaters (default is 0)", delegate(string v) { nonRepeaters = int.Parse(v); }) .Add("Cr:", "Max-repetitions (default is 10)", delegate(string v) { maxRepetitions = int.Parse(v); }) .Add("a:", "Authentication method (MD5 or SHA)", delegate(string v) { authentication = v; }) .Add("A:", "Authentication passphrase", delegate(string v) { authPhrase = v; }) .Add("x:", "Privacy method", delegate(string v) { privacy = v; }) .Add("X:", "Privacy passphrase", delegate(string v) { privPhrase = v; }) .Add("u:", "Security name", delegate(string v) { user = v; }) .Add("h|?|help", "Print this help information.", delegate(string v) { showHelp = v != null; }) .Add("V", "Display version number of this application.", delegate(string v) { showVersion = v != null; }) .Add("d", "Display message dump", delegate(string v) { dump = true; }) .Add("t:", "Timeout value (unit is second).", delegate(string v) { timeout = int.Parse(v) * 1000; }) .Add("r:", "Retry count (default is 0)", delegate(string v) { retry = int.Parse(v); }) .Add("v:", "SNMP version (2 and 3 are currently supported)", delegate(string v) { switch (int.Parse(v)) { case 2: version = VersionCode.V2; break; case 3: version = VersionCode.V3; break; default: throw new ArgumentException("no such version: " + v); } }); if (args.Length == 0) { ShowHelp(p); return; } List <string> extra; try { extra = p.Parse(args); } catch (OptionException ex) { Console.WriteLine(ex.Message); return; } if (showHelp) { ShowHelp(p); return; } if (extra.Count < 2) { Console.WriteLine("invalid variable number: " + extra.Count); return; } if (showVersion) { Console.WriteLine(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version); return; } IPAddress ip; bool parsed = IPAddress.TryParse(extra[0], out ip); if (!parsed) { foreach (IPAddress address in Dns.GetHostAddresses(extra[0]).Where(address => address.AddressFamily == AddressFamily.InterNetwork)) { ip = address; break; } if (ip == null) { Console.WriteLine("invalid host or wrong IP address found: " + extra[0]); return; } } try { List <Variable> vList = new List <Variable>(); for (int i = 1; i < extra.Count; i++) { Variable test = new Variable(new ObjectIdentifier(extra[i])); vList.Add(test); } IPEndPoint receiver = new IPEndPoint(ip, 161); if (version != VersionCode.V3) { GetBulkRequestMessage message = new GetBulkRequestMessage(0, version, new OctetString(community), nonRepeaters, maxRepetitions, vList); ISnmpMessage response = message.GetResponse(timeout, receiver); if (response.Pdu().ErrorStatus.ToInt32() != 0) // != ErrorCode.NoError { throw ErrorException.Create( "error in response", receiver.Address, response); } foreach (Variable variable in response.Pdu().Variables) { Console.WriteLine(variable); } return; } if (string.IsNullOrEmpty(user)) { Console.WriteLine("User name need to be specified for v3."); return; } IAuthenticationProvider auth = (level & Levels.Authentication) == Levels.Authentication ? GetAuthenticationProviderByName(authentication, authPhrase) : DefaultAuthenticationProvider.Instance; IPrivacyProvider priv; if ((level & Levels.Privacy) == Levels.Privacy) { priv = new DESPrivacyProvider(new OctetString(privPhrase), auth); } else { priv = new DefaultPrivacyProvider(auth); } Discovery discovery = Messenger.GetNextDiscovery(SnmpType.GetBulkRequestPdu); ReportMessage report = discovery.GetResponse(timeout, receiver); GetBulkRequestMessage request = new GetBulkRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString(user), nonRepeaters, maxRepetitions, vList, priv, Messenger.MaxMessageSize, report); ISnmpMessage reply = request.GetResponse(timeout, receiver); if (dump) { Console.WriteLine("Request message bytes:"); Console.WriteLine(ByteTool.Convert(request.ToBytes())); Console.WriteLine("Response message bytes:"); Console.WriteLine(ByteTool.Convert(reply.ToBytes())); } if (reply is ReportMessage) { if (reply.Pdu().Variables.Count == 0) { Console.WriteLine("wrong report message received"); return; } var id = reply.Pdu().Variables[0].Id; if (id != Messenger.NotInTimeWindow) { var error = id.GetErrorMessage(); Console.WriteLine(error); return; } // according to RFC 3414, send a second request to sync time. request = new GetBulkRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString(user), nonRepeaters, maxRepetitions, vList, priv, Messenger.MaxMessageSize, reply); reply = request.GetResponse(timeout, receiver); } else if (reply.Pdu().ErrorStatus.ToInt32() != 0) // != ErrorCode.NoError { throw ErrorException.Create( "error in response", receiver.Address, reply); } foreach (Variable v in reply.Pdu().Variables) { Console.WriteLine(v); } } catch (SnmpException ex) { Console.WriteLine(ex); } catch (SocketException ex) { Console.WriteLine(ex); } }
static void Main(string[] args) { string community = "public"; bool showHelp = false; bool showVersion = false; VersionCode version = VersionCode.V1; int timeout = 1000; int retry = 0; Levels level = Levels.Reportable; string user = string.Empty; string authentication = string.Empty; string authPhrase = string.Empty; string privacy = string.Empty; string privPhrase = string.Empty; bool dump = false; OptionSet p = new OptionSet() .Add("c:", "Community name, (default is public)", delegate(string v) { if (v != null) { community = v; } }) .Add("l:", "Security level, (default is noAuthNoPriv)", delegate(string v) { if (v.ToUpperInvariant() == "NOAUTHNOPRIV") { level = Levels.Reportable; } else if (v.ToUpperInvariant() == "AUTHNOPRIV") { level = Levels.Authentication | Levels.Reportable; } else if (v.ToUpperInvariant() == "AUTHPRIV") { level = Levels.Authentication | Levels.Privacy | Levels.Reportable; } else { throw new ArgumentException("no such security mode: " + v); } }) .Add("a:", "Authentication method (MD5 or SHA)", delegate(string v) { authentication = v; }) .Add("A:", "Authentication passphrase", delegate(string v) { authPhrase = v; }) .Add("x:", "Privacy method", delegate(string v) { privacy = v; }) .Add("X:", "Privacy passphrase", delegate(string v) { privPhrase = v; }) .Add("u:", "Security name", delegate(string v) { user = v; }) .Add("h|?|help", "Print this help information.", delegate(string v) { showHelp = v != null; }) .Add("V", "Display version number of this application.", delegate(string v) { showVersion = v != null; }) .Add("d", "Display message dump", delegate(string v) { dump = true; }) .Add("t:", "Timeout value (unit is second).", delegate(string v) { timeout = int.Parse(v) * 1000; }) .Add("r:", "Retry count (default is 0)", delegate(string v) { retry = int.Parse(v); }) .Add("v:", "SNMP version (1, 2, and 3 are currently supported)", delegate(string v) { switch (int.Parse(v)) { case 1: version = VersionCode.V1; break; case 2: version = VersionCode.V2; break; case 3: version = VersionCode.V3; break; default: throw new ArgumentException("no such version: " + v); } }); if (args.Length == 0) { ShowHelp(p); return; } List <string> extra; try { extra = p.Parse(args); } catch (OptionException ex) { Console.WriteLine(ex.Message); return; } if (showHelp) { ShowHelp(p); return; } if ((extra.Count - 1) % 3 != 0) { Console.WriteLine("invalid variable number: " + extra.Count); return; } if (showVersion) { Console.WriteLine(Assembly.GetEntryAssembly().GetCustomAttribute <AssemblyVersionAttribute>().Version); return; } IPAddress ip; bool parsed = IPAddress.TryParse(extra[0], out ip); if (!parsed) { var addresses = Dns.GetHostAddressesAsync(extra[0]); addresses.Wait(); foreach (IPAddress address in addresses.Result.Where(address => address.AddressFamily == AddressFamily.InterNetwork)) { ip = address; break; } if (ip == null) { Console.WriteLine("invalid host or wrong IP address found: " + extra[0]); return; } } try { List <Variable> vList = new List <Variable>(); for (int i = 1; i < extra.Count; i = i + 3) { string type = extra[i + 1]; if (type.Length != 1) { Console.WriteLine("invalid type string: " + type); return; } ISnmpData data; switch (type[0]) { case 'i': data = new Integer32(int.Parse(extra[i + 2])); break; case 'u': data = new Gauge32(uint.Parse(extra[i + 2])); break; case 't': data = new TimeTicks(uint.Parse(extra[i + 2])); break; case 'a': data = new IP(IPAddress.Parse(extra[i + 2]).GetAddressBytes()); break; case 'o': data = new ObjectIdentifier(extra[i + 2]); break; case 'x': data = new OctetString(ByteTool.Convert(extra[i + 2])); break; case 's': data = new OctetString(extra[i + 2]); break; case 'd': data = new OctetString(ByteTool.ConvertDecimal(extra[i + 2])); break; case 'n': data = new Null(); break; default: Console.WriteLine("unknown type string: " + type[0]); return; } Variable test = new Variable(new ObjectIdentifier(extra[i]), data); vList.Add(test); } IPEndPoint receiver = new IPEndPoint(ip, 161); if (version != VersionCode.V3) { foreach (Variable variable in Messenger.Set(version, receiver, new OctetString(community), vList, timeout)) { Console.WriteLine(variable); } return; } if (string.IsNullOrEmpty(user)) { Console.WriteLine("User name need to be specified for v3."); return; } IAuthenticationProvider auth = (level & Levels.Authentication) == Levels.Authentication ? GetAuthenticationProviderByName(authentication, authPhrase) : DefaultAuthenticationProvider.Instance; IPrivacyProvider priv; if ((level & Levels.Privacy) == Levels.Privacy) { if (DESPrivacyProvider.IsSupported) { priv = new DESPrivacyProvider(new OctetString(privPhrase), auth); } else { Console.WriteLine("DES (ECB) is not supported by .NET Core."); return; } } else { priv = new DefaultPrivacyProvider(auth); } Discovery discovery = Messenger.GetNextDiscovery(SnmpType.SetRequestPdu); ReportMessage report = discovery.GetResponse(timeout, receiver); SetRequestMessage request = new SetRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString(user), vList, priv, Messenger.MaxMessageSize, report); ISnmpMessage reply = request.GetResponse(timeout, receiver); if (dump) { Console.WriteLine("Request message bytes:"); Console.WriteLine(ByteTool.Convert(request.ToBytes())); Console.WriteLine("Response message bytes:"); Console.WriteLine(ByteTool.Convert(reply.ToBytes())); } if (reply is ReportMessage) { if (reply.Pdu().Variables.Count == 0) { Console.WriteLine("wrong report message received"); return; } var id = reply.Pdu().Variables[0].Id; if (id != Messenger.NotInTimeWindow) { var error = id.GetErrorMessage(); Console.WriteLine(error); return; } // according to RFC 3414, send a second request to sync time. request = new SetRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString(user), vList, priv, Messenger.MaxMessageSize, reply); reply = request.GetResponse(timeout, receiver); } else if (reply.Pdu().ErrorStatus.ToInt32() != 0) // != ErrorCode.NoError { throw ErrorException.Create( "error in response", receiver.Address, reply); } foreach (Variable v in reply.Pdu().Variables) { Console.WriteLine(v); } } catch (SnmpException ex) { Console.WriteLine(ex); } catch (SocketException ex) { Console.WriteLine(ex); } }
public static void Main(string[] args) { string community = "public"; bool showHelp = false; bool showVersion = false; VersionCode version = VersionCode.V1; int timeout = 1000; int retry = 0; Levels level = Levels.Reportable; string user = string.Empty; string authentication = string.Empty; string authPhrase = string.Empty; string privacy = string.Empty; string privPhrase = string.Empty; bool dump = false; OptionSet p = new OptionSet() .Add("c:", "-c for community name, (default is public)", delegate(string v) { if (v != null) { community = v; } }) .Add("l:", "-l for security level, (default is noAuthNoPriv)", delegate(string v) { if (v.ToUpperInvariant() == "NOAUTHNOPRIV") { level = Levels.Reportable; } else if (v.ToUpperInvariant() == "AUTHNOPRIV") { level = Levels.Authentication | Levels.Reportable; } else if (v.ToUpperInvariant() == "AUTHPRIV") { level = Levels.Authentication | Levels.Privacy | Levels.Reportable; } else { throw new ArgumentException("no such security mode: " + v); } }) .Add("a:", "-a for authentication method (MD5 or SHA)", delegate(string v) { authentication = v; }) .Add("A:", "-A for authentication passphrase", delegate(string v) { authPhrase = v; }) .Add("x:", "-x for privacy method", delegate(string v) { privacy = v; }) .Add("X:", "-X for privacy passphrase", delegate(string v) { privPhrase = v; }) .Add("u:", "-u for security name", delegate(string v) { user = v; }) .Add("h|?|help", "-h, -?, -help for help.", delegate(string v) { showHelp = v != null; }) .Add("V", "-V to display version number of this application.", delegate(string v) { showVersion = v != null; }) .Add("d", "-d to display message dump", delegate(string v) { dump = true; }) .Add("t:", "-t for timeout value (unit is second).", delegate(string v) { timeout = int.Parse(v) * 1000; }) .Add("r:", "-r for retry count (default is 0)", delegate(string v) { retry = int.Parse(v); }) .Add("v|version:", "-v for SNMP version (1, 2, and 3 are currently supported)", delegate(string v) { switch (int.Parse(v)) { case 1: version = VersionCode.V1; break; case 2: version = VersionCode.V2; break; case 3: version = VersionCode.V3; break; default: throw new ArgumentException("no such version: " + v); } }); List <string> extra = p.Parse(args); if (showHelp) { ShowHelp(); return; } if (showVersion) { Console.WriteLine(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version); return; } if (extra.Count < 2) { ShowHelp(); return; } IPAddress ip; bool parsed = IPAddress.TryParse(extra[0], out ip); if (!parsed) { foreach (IPAddress address in Dns.GetHostAddresses(extra[0]).Where(address => address.AddressFamily == AddressFamily.InterNetwork)) { ip = address; break; } if (ip == null) { Console.WriteLine("invalid host or wrong IP address found: " + extra[0]); return; } } try { List <Variable> vList = new List <Variable>(); for (int i = 1; i < extra.Count; i++) { Variable test = new Variable(new ObjectIdentifier(extra[i])); vList.Add(test); } IPEndPoint receiver = new IPEndPoint(ip, 161); if (version != VersionCode.V3) { foreach ( Variable variable in Messenger.Get(version, receiver, new OctetString(community), vList, timeout)) { Console.WriteLine(variable); } return; } if (string.IsNullOrEmpty(user)) { Console.WriteLine("User name need to be specified for v3."); return; } IAuthenticationProvider auth = (level & Levels.Authentication) == Levels.Authentication ? GetAuthenticationProviderByName(authentication, authPhrase) : DefaultAuthenticationProvider.Instance; IPrivacyProvider priv; if ((level & Levels.Privacy) == Levels.Privacy) { priv = new DESPrivacyProvider(new OctetString(privPhrase), auth); } else { priv = new DefaultPrivacyProvider(auth); } Discovery discovery = Messenger.NextDiscovery; ReportMessage report = discovery.GetResponse(timeout, receiver); GetRequestMessage request = new GetRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString(user), vList, priv, Messenger.MaxMessageSize, report); ISnmpMessage response = request.GetResponse(timeout, receiver); if (dump) { Console.WriteLine(ByteTool.Convert(request.ToBytes())); } if (response.Pdu().ErrorStatus.ToInt32() != 0) // != ErrorCode.NoError { throw ErrorException.Create( "error in response", receiver.Address, response); } foreach (Variable v in response.Pdu().Variables) { Console.WriteLine(v); } } catch (SnmpException ex) { Console.WriteLine(ex); } catch (SocketException ex) { Console.WriteLine(ex); } }
public void TestEncrypt2() { byte[] expected = ByteTool.Convert("04 30 9D 13 04 9C 7E D9 84 8B 33 C3 26 5C 1F 91 30 27 D3 56 B0 FD 81 36 50 3A EF 80 1C B9 25 D6 38 84 A7 07 45 FE E8 D7 01 83 A1 CE 04 79 9D 5F 9E 2F"); OctetString engineId = new OctetString(ByteTool.Convert("80 00 1F 88 80 E9 63 00 00 D6 1F F4 49")); AESPrivacyProvider priv = new AESPrivacyProvider(new OctetString("passtest"), new MD5AuthenticationProvider(new OctetString("testpass"))); Scope scope = new Scope(engineId, OctetString.Empty, new GetRequestPdu(0x3A25, new List <Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.3.0")) })); SecurityParameters parameters = new SecurityParameters(engineId, new Integer32(0x14), new Integer32(0x35), new OctetString("lexmark"), new OctetString(new byte[12]), new OctetString(ByteTool.Convert("00 00 00 01 44 2C A3 B5"))); ISnmpData data = priv.Encrypt(scope.GetData(VersionCode.V3), parameters); Assert.Equal(SnmpType.OctetString, data.TypeCode); Assert.Equal(ByteTool.Convert(expected), ByteTool.Convert(data.ToBytes())); }
public void TestConstructorV3Auth1() { const string bytes = "30 73" + "02 01 03 " + "30 0F " + "02 02 35 41 " + "02 03 00 FF E3" + "04 01 05" + "02 01 03" + "04 2E " + "30 2C" + "04 0D 80 00 1F 88 80 E9 63 00 00 D6 1F F4 49 " + "02 01 0D " + "02 01 57 " + "04 05 6C 65 78 6C 69 " + "04 0C 1C 6D 67 BF B2 38 ED 63 DF 0A 05 24 " + "04 00 " + "30 2D " + "04 0D 80 00 1F 88 80 E9 63 00 00 D6 1F F4 49 " + "04 00 " + "A0 1A 02 02 01 AF 02 01 00 02 01 00 30 0E 30 0C 06 08 2B 06 01 02 01 01 03 00 05 00"; ReportMessage report = new ReportMessage( VersionCode.V3, new Header( new Integer32(13633), new Integer32(0xFFE3), 0), new SecurityParameters( new OctetString(ByteTool.Convert("80 00 1F 88 80 E9 63 00 00 D6 1F F4 49")), new Integer32(0x0d), new Integer32(0x57), new OctetString("lexli"), new OctetString(new byte[12]), OctetString.Empty), new Scope( new OctetString(ByteTool.Convert("80 00 1F 88 80 E9 63 00 00 D6 1F F4 49")), OctetString.Empty, new ReportPdu( 0x01AF, ErrorCode.NoError, 0, new List <Variable>(1) { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.3.0")) })), DefaultPrivacyProvider.DefaultPair, null); IPrivacyProvider privacy = new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("testpass"))); GetRequestMessage request = new GetRequestMessage( VersionCode.V3, 13633, 0x01AF, new OctetString("lexli"), new List <Variable>(1) { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.3.0")) }, privacy, Messenger.MaxMessageSize, report); Assert.Equal(Levels.Authentication | Levels.Reportable, request.Header.SecurityLevel); Assert.Equal(ByteTool.Convert(bytes), request.ToBytes()); }
public void TestDecrypt2() { byte[] encrypted = ByteTool.Convert("04 38 A4 F9 78 15 2B 14 45 F7 4F C5 B2 1C 82 72 9A 0B D9 EE C1 17 3E E1 26 0D 8B D4 7B 0F D7 35 06 1B E2 14 0D 4A 9B CA BF EF 18 6B 53 B9 FA 70 95 D0 15 38 C5 77 96 85 61 40"); var privacy = new DESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))); var parameters = new SecurityParameters( new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449")), new Integer32(0), new Integer32(0), new OctetString("lextm"), OctetString.Empty, new OctetString(ByteTool.Convert("0000000069D39B2A"))); var data = privacy.Decrypt(DataFactory.CreateSnmpData(encrypted), parameters); Assert.AreEqual(SnmpType.Sequence, data.TypeCode); // TODO: parse snmp#net output and compare result. byte[] net = ByteTool.Convert( "04 38 A4 F9 78 15 2B 14 45 F7 4F C5 B2 1C 82 72 9A 0B D9 EE C1 17 3E E1 26 0D 8B D4 7B 0F D7 35 06 1B E2 14 0D 4A 9B CA BF EF 18 6B 53 B9 FA 70 95 D0 5D AF 04 5A 68 B5 DA 73"); var netData = privacy.Decrypt(DataFactory.CreateSnmpData(net), parameters); Assert.AreEqual(SnmpType.Sequence, netData.TypeCode); Assert.AreEqual(ByteTool.Convert(ByteTool.ToBytes(netData)), ByteTool.Convert(ByteTool.ToBytes(data))); }
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 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++; }; 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(); var engine = new SnmpEngine(pipelineFactory, new Listener { Users = users }, group); 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, 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); } finally { if (SnmpMessageExtension.IsRunningOnWindows) { engine.Stop(); } } }
/// <summary> /// Invio effettivo /// </summary> /// <param name="id"></param> /// <param name="variables"></param> /// <returns></returns> public bool SendTrap(string id, List <Variable> variables) { bool success = false; try { switch (myVersion) { case "V1": // Lextm.SharpSnmpLib.VersionCode.V1: Messenger.SendTrapV1( new IPEndPoint(IpRequestManager, IpRequestPORT), IpRequestSender, UName, new ObjectIdentifier(id), GenericCode.ColdStart, 0, //specific 0, //timestamp variables ); break; case "V2": // Lextm.SharpSnmpLib.VersionCode.V2: Messenger.SendTrapV2( 0, //request Id Lextm.SharpSnmpLib.VersionCode.V2, new IPEndPoint(IpRequestManager, IpRequestPORT), UName, new ObjectIdentifier(id), 0, //timestamp variables ); //var trap = new TrapV2Message( // VersionCode.V3, // 1, // 1, // UName, // new ObjectIdentifier(id), // 0, // variables, // DefaultPrivacyProvider.DefaultPair, // 0x10000, // new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449")), // 0, // 0); //trap.Send(new IPEndPoint(IpRequestManager, IpRequestPORT)); break; case "V3": // Lextm.SharpSnmpLib.VersionCode.V3: var trap = new TrapV2Message( Lextm.SharpSnmpLib.VersionCode.V3, 528732060, //messageId 1905687779, //request Id UName, new ObjectIdentifier(id), 0, //time variables, DefaultPrivacyProvider.DefaultPair, 0x10000, //MaxMessageSize new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449")), //Engine id 0, //engine boots 0); //engine time trap.Send(new IPEndPoint(IpRequestManager, IpRequestPORT)); break; } success = true; } catch (Exception ex) { ErrorString = String.Format("Message: {0}\r\nSource: {1}\r\nStackTrace:{2}", ex.Message, ex.Source, ex.StackTrace); } return(success); }