Наследование: System.Object
Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Header"/> class.
        /// </summary>
        /// <param name="messageId">The message id.</param>
        /// <param name="maxMessageSize">Size of the max message.</param>
        /// <param name="securityBits">The flags.</param>
        /// <param name="securityModel">The security model.</param>
        /// <remarks>If you want an empty header, please use <see cref="Empty"/>.</remarks>
        public Header(Integer32 messageId, Integer32 maxMessageSize, OctetString securityBits, Integer32 securityModel)
        {
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId");
            }

            if (maxMessageSize == null)
            {
                throw new ArgumentNullException("maxMessageSize");
            }

            if (securityBits == null)
            {
                throw new ArgumentNullException("securityBits");
            }

            if (securityModel == null)
            {
                throw new ArgumentNullException("securityModel");
            }

            _messageId = messageId;
            _maxSize = maxMessageSize;
            _flags = securityBits;
            _securityModel = securityModel;
        }
Пример #2
0
 /// <summary>
 /// Creates a <see cref="InformRequestPdu"/> instance for discovery.
 /// </summary>
 /// <param name="requestId">The request id.</param>
 public InformRequestPdu(int requestId)
 {
     Enterprise = null;
     RequestId = new Integer32(requestId);
     _time = new TimeTicks(0);
     Variables = new List<Variable>();
     _varbindSection = Variable.Transform(Variables);
 }
 public void TestNegative()
 {
     const int i = -2147418240;
     Integer32 data = new Integer32(i);
     byte[] bytes = data.ToBytes();
     Integer32 other = (Integer32)DataFactory.CreateSnmpData(bytes);
     Assert.AreEqual(i, other.ToInt32());
 }
Пример #4
0
 public void TestNegative2()
 {
     // bug 7217 http://sharpsnmplib.codeplex.com/workitem/7217
     Integer32 i = new Integer32(-250);
     var result = DataFactory.CreateSnmpData(i.ToBytes());
     Assert.AreEqual(SnmpType.Integer32, result.TypeCode);
     Assert.AreEqual(-250, ((Integer32)result).ToInt32());
 }
Пример #5
0
 public GetRequestPdu(int requestId, ErrorCode errorStatus, int errorIndex, IList<Variable> variables)
 {
     RequestId = new Integer32(requestId);
     ErrorStatus = new Integer32((int)errorStatus);
     ErrorIndex = new Integer32(errorIndex);
     Variables = variables;
     _varbindSection = Variable.Transform(variables);
 }
Пример #6
0
 /// <summary>
 /// Creates a <see cref="SetRequestPdu"/> instance with all contents.
 /// </summary>
 /// <param name="requestId">The request id.</param>
 /// <param name="errorStatus">Error status</param>
 /// <param name="errorIndex">Error index</param>
 /// <param name="variables">Variables</param>
 private SetRequestPdu(Integer32 requestId, Integer32 errorStatus, Integer32 errorIndex, IList<Variable> variables)
 {
     RequestId = requestId;
     ErrorStatus = errorStatus;
     ErrorIndex = errorIndex;
     Variables = variables;
     _varbindSection = Variable.Transform(Variables);
 }
 private GetNextRequestPdu(Integer32 requestId, Integer32 errorStatus, Integer32 errorIndex, IList<Variable> variables)
 {
     RequestId = requestId;
     ErrorStatus = errorStatus;
     ErrorIndex = errorIndex;
     Variables = variables;
     _varbindSection = Variable.Transform(variables);
     ////_raw = ByteTool.ParseItems(_seq, _errorStatus, _errorIndex, _varbindSection);
 }
 private GetBulkRequestPdu(Integer32 requestId, Integer32 nonRepeaters, Integer32 maxRepetitions, IList<Variable> variables)
 {
     RequestId = requestId;
     ErrorStatus = nonRepeaters;
     ErrorIndex = maxRepetitions;
     Variables = variables;
     _varbindSection = Variable.Transform(variables);
     ////_raw = ByteTool.ParseItems(_seq, _nonRepeaters, _maxRepetitions, _varbindSection);
 }
Пример #9
0
 /// <summary>
 /// Creates a <see cref="ResponsePdu"/> with all contents.
 /// </summary>
 /// <param name="requestId">The request ID.</param>
 /// <param name="errorStatus">Error status.</param>
 /// <param name="errorIndex">Error index.</param>
 /// <param name="variables">Variables.</param>
 public ResponsePdu(int requestId, ErrorCode errorStatus, int errorIndex, IList<Variable> variables)
 {
     RequestId = new Integer32(requestId);
     ErrorStatus = new Integer32((int)errorStatus);
     ErrorIndex = new Integer32(errorIndex);
     Variables = variables;
     _varbindSection = Variable.Transform(variables);
     ////_raw = ByteTool.ParseItems(_sequenceNumber, _errorStatus, _errorIndex, _varbindSection);
 }
Пример #10
0
 public void TestToInt32()
 {
     const int result = -26955;
     byte[] expected = new byte[] {0x96, 0xB5};
     Integer32 test = new Integer32(expected);
     Assert.AreEqual(result, test.ToInt32());
     
     Assert.AreEqual(255, new Integer32(new byte[] {0x00, 0xFF}).ToInt32());
 }
Пример #11
0
 public void TestNegative3()
 {
 	// #7240
     const int i = -237053658;
     Integer32 data = new Integer32(i);
     byte[] bytes = data.ToBytes();
     Assert.AreEqual(6, bytes.Length);
     var exception = Assert.Throws<ArgumentException>(() => DataFactory.CreateSnmpData(new byte[] { 0x02, 0x05, 0xFF, 0xF1, 0xDE, 0xD9, 0x26 }));
     Assert.AreEqual("truncation error for 32-bit integer coding\r\nParameter name: length", exception.Message);
 }
Пример #12
0
 public void TestToBytes()
 {
     byte[] bytes = new byte[] {0x02, 0x02, 0x96, 0xB5};
     Integer32 test = new Integer32(-26955);
     Assert.AreEqual(bytes, test.ToBytes());
     
     Assert.AreEqual(new byte[] {0x02, 0x02, 0x00, 0xFF}, new Integer32(255).ToBytes());
     
     Assert.AreEqual(6, new Integer32(2147483647).ToBytes().Length);
 }
Пример #13
0
        /// <summary>Constructor</summary>
        public TrapPdu()
        {
            _asnType = (byte)PduType.Trap;
            _enterprise = new Oid();
            _agentAddr = new IpAddress();
            _generic = new Integer32();
            _specific = new Integer32();
            _timeStamp = new TimeTicks();

            _variables = new VbCollection();
        }
Пример #14
0
 public void TestConstructor()
 {
     Integer32 test = new Integer32(100);
     Assert.AreEqual(100, test.ToInt32());
     
     Integer32 test2 = new Integer32(new byte[] {0x00});
     Assert.AreEqual(0, test2.ToInt32());
     
     Integer32 test3 = new Integer32(new byte[] {0xFF});
     Assert.AreEqual(-1, test3.ToInt32());
 }
Пример #15
0
 public TrapV2Pdu(int requestId, ObjectIdentifier enterprise, uint time, IList<Variable> variables)
 {
     Enterprise = enterprise;
     RequestId = new Integer32(requestId);
     _time = new TimeTicks(time);
     Variables = variables;
     IList<Variable> full = new List<Variable>(variables);
     full.Insert(0, new Variable(new uint[] { 1, 3, 6, 1, 2, 1, 1, 3, 0 }, _time));
     full.Insert(1, new Variable(new uint[] { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }, Enterprise));
     _varbindSection = Variable.Transform(full);
 }
 public InformRequestPdu(int requestId, ObjectIdentifier enterprise, uint time, IList<Variable> variables)
 {
     Enterprise = enterprise;
     RequestId = new Integer32(requestId);
     _time = new TimeTicks(time);
     Variables = variables;
     IList<Variable> full = new List<Variable>(variables);
     full.Insert(0, new Variable(new uint[] { 1, 3, 6, 1, 2, 1, 1, 3, 0 }, _time));
     full.Insert(1, new Variable(new uint[] { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }, Enterprise));
     _varbindSection = Variable.Transform(full);
     ////_raw = ByteTool.ParseItems(_seq, new Integer32(0), new Integer32(0), _varbindSection);
 }        
Пример #17
0
        /// <summary>
        /// Creates a <see cref="GetBulkRequestPdu"/> with all contents.
        /// </summary>
        /// <param name="requestId">The request id.</param>
        /// <param name="nonRepeaters">Non-repeaters.</param>
        /// <param name="maxRepetitions">Max repetitions.</param>
        /// <param name="variables">Variables.</param>
        public GetBulkRequestPdu(int requestId, int nonRepeaters, int maxRepetitions, IList<Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException("variables");
            }

            RequestId = new Integer32(requestId);
            ErrorStatus = new Integer32(nonRepeaters);
            ErrorIndex = new Integer32(maxRepetitions);
            Variables = variables;
            _varbindSection = Variable.Transform(variables);
        }
Пример #18
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Header"/> class.
        /// </summary>
        /// <param name="messageId">The message id.</param>
        /// <param name="maxMessageSize">Size of the max message.</param>
        /// <param name="securityLevel">The security level.</param>
        /// <remarks>If you want an empty header, please use <see cref="Empty"/>.</remarks>
        public Header(Integer32 messageId, Integer32 maxMessageSize, Levels securityLevel)
        {
            if (maxMessageSize == null)
            {
                throw new ArgumentNullException("maxMessageSize");
            }

            _messageId = messageId;
            _maxSize = maxMessageSize;
            SecurityLevel = securityLevel;
            _flags = new OctetString(SecurityLevel);
            _securityModel = DefaultSecurityModel;
        }
Пример #19
0
 public void TestConstructor()
 {
     Integer32 test = new Integer32(100);
     Assert.AreEqual(100, test.ToInt32());
     Assert.Throws<InvalidCastException>(() => test.ToErrorCode());
     Assert.Throws<InvalidCastException>(() => new Integer32(-1).ToErrorCode());
     
     Integer32 test2 = new Integer32(new byte[] {0x00});
     Assert.AreEqual(0, test2.ToInt32());
     
     Integer32 test3 = new Integer32(new byte[] {0xFF});
     Assert.AreEqual(-1, test3.ToInt32());
 }
Пример #20
0
        /// <summary>
        /// Creates a <see cref="ResponsePdu"/> with all contents.
        /// </summary>
        /// <param name="requestId">The request ID.</param>
        /// <param name="errorStatus">Error status.</param>
        /// <param name="errorIndex">Error index.</param>
        /// <param name="variables">Variables.</param>
        public ResponsePdu(int requestId, ErrorCode errorStatus, int errorIndex, IList<Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException("variables");
            }

            RequestId = new Integer32(requestId);
            ErrorStatus = new Integer32((int)errorStatus);
            ErrorIndex = new Integer32(errorIndex);
            Variables = variables;
            _varbindSection = Variable.Transform(variables);
        }
Пример #21
0
        /// <summary>
        /// Creates a <see cref="GetNextRequestPdu"/> with all contents.
        /// </summary>
        /// <param name="requestId">The request id.</param>
        /// <param name="variables">Variables</param>
        public GetNextRequestPdu(int requestId, IList<Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException("variables");
            }

            RequestId = new Integer32(requestId);
            ErrorStatus = Integer32.Zero;
            ErrorIndex = Integer32.Zero;
            Variables = variables;
            _varbindSection = Variable.Transform(variables);
        }
Пример #22
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Header"/> class.
        /// </summary>
        /// <param name="data">The data.</param>
        public Header(ISnmpData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            Sequence container = (Sequence)data;
            _messageId = (Integer32)container[0];
            _maxSize = (Integer32)container[1];
            _flags = (OctetString)container[2];
            _securityModel = (Integer32)container[3];
        }
Пример #23
0
        public void TestConstructor()
        {
            Integer32 test = new Integer32(100);

            Assert.AreEqual(100, test.ToInt32());

            Integer32 test2 = new Integer32(new byte[] { 0x00 });

            Assert.AreEqual(0, test2.ToInt32());

            Integer32 test3 = new Integer32(new byte[] { 0xFF });

            Assert.AreEqual(-1, test3.ToInt32());
        }
Пример #24
0
        public static IList <Variable> Set(string IpAddress, string writePermissionString, string Identifier, int readPort, string InsertedValue)
        {
            ISnmpData insertedValue = new Integer32(int.Parse(InsertedValue));
            var       result        = Messenger.Set(VersionCode.V1,
                                                    new IPEndPoint(IPAddress.Parse(IpAddress), readPort),
                                                    new OctetString(writePermissionString),
                                                    new List <Variable> {
                new Variable(new ObjectIdentifier(Identifier), insertedValue)
            },
                                                    60000);


            return(result);
        }
Пример #25
0
        public void TestEqual()
        {
            var left  = new Integer32(599);
            var right = new Integer32(599);

            Assert.Equal(599.GetHashCode(), left.GetHashCode());
            Assert.Equal(left, right);
            Assert.True((Integer32)null == (Integer32)null);
            Assert.NotEqual(null, right);
            Assert.NotEqual(left, null);
            Assert.True(left.Equals((object)right));
            Assert.True(left.Equals(right));
            Assert.True(left != null);
        }
Пример #26
0
        public void SetGood()
        {
            var i1 = new Integer32(10);
            var i2 = new Integer32(20);

            Assert.Equal(10, i1);

            i1.Set(i2);

            i2.Value = 30;

            Assert.Equal(20, i1.Value);
            Assert.Equal(30, i2.Value);
        }
Пример #27
0
        private void ActSetExecute(object sender, EventArgs e)
        {
            try
            {
                ISnmpData data;
                using (FormSet form = new FormSet())
                {
                    ObjectIdentifier id = GetIdForGet(
                        treeView1.SelectedNode.Tag as IDefinition);
                    form.OldVal = Profiles.DefaultProfile.GetValue(new Variable(id));
                    if (form.ShowDialog() != DialogResult.OK)
                    {
                        return;
                    }

                    if (form.IsString)
                    {
                        data = new OctetString(form.NewVal);
                    }
                    else
                    {
                        int result;
                        if (!int.TryParse(form.NewVal, out result))
                        {
                            MessageBox.Show(
                                "Value entered was not an Integer!",
                                "SNMP Set Error",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                            return;
                        }

                        data = new Integer32(result);
                    }
                }

                Logger.Info("==== Begin SET ====");
                ObjectIdentifier id1 = GetIdForGet(treeView1.SelectedNode.Tag as IDefinition);
                Profiles.DefaultProfile.Set(new Variable(id1, data));
            }
            catch (Exception ex)
            {
                Logger.Info(ex.ToString());
            }
            finally
            {
                Logger.Info("==== End SET ====");
            }
        }
        /// <inheritdoc/>
        public override string?ToString()
        {
            return(DataType switch
            {
                StormGameEventDataType.Bool => Boolean?.ToString(),
                StormGameEventDataType.Integer32 => Integer32?.ToString(),
                StormGameEventDataType.UnsignedInteger32 => UnsignedInteger32?.ToString(),
                StormGameEventDataType.UnsignedInteger64 => UnsignedInteger64?.ToString(),
                StormGameEventDataType.Blob => Blob != null ? @$ "" "{Blob}" "" : null,
                StormGameEventDataType.Array => Array != null ? $"[{string.Join(", ", Array.Select(i => i?.ToString()))}]" : null,
                StormGameEventDataType.Structure => Structure != null ? $"{{{string.Join(", ", Structure.Select(i => i?.ToString()))}}}" : null,
                StormGameEventDataType.BitArray => BitArray != null ? $"[{string.Join(", ", BitArray.Select(i => i.ToString()))}]" : null,

                _ => string.Empty,
            });
Пример #29
0
        public void TestEqual()
        {
            var left = new Integer32(599);
            var right = new Integer32(599);
            Assert.AreEqual(left, right);
// ReSharper disable RedundantCast
// ReSharper disable EqualExpressionComparison
            Assert.IsTrue((Integer32)null == (Integer32)null);
// ReSharper restore EqualExpressionComparison
// ReSharper restore RedundantCast
            Assert.AreNotEqual(null, right);
            Assert.AreNotEqual(left, null);
            Assert.IsTrue(left.Equals(right));
            Assert.IsTrue(left != null);
        }
Пример #30
0
        /// <summary>
        /// Reset USM object to default values. All OctetString and MutableByte members are reset to 0 length and
        /// privacy and authentication protocols are set to none.
        /// </summary>
        public void Reset()
        {
            Type           = 3;
            engineId       = new OctetString();
            engineBoots    = new Integer32();
            engineTime     = new Integer32();
            authentication = AuthenticationDigests.None;

            securityName             = new OctetString();
            authenticationSecret     = new MutableByte();
            authenticationParameters = new OctetString();
            privacySecret            = new MutableByte();
            privacy           = EPrivacyProtocols.None;
            privacyParameters = new OctetString();
        }
Пример #31
0
        /// <summary>
        /// Returns two LONG values, in and out octets for plotting.
        /// </summary>
        /// <param name="interfaceIndex"></param>
        /// <returns></returns>
        private long[] getInterfaceOctets(int interfaceIndex)
        {
            // Where our SNMP results are going.
            List <Variable> oidResults = new List <Variable>();

            ObjectIdentifier oidSpeed     = new ObjectIdentifier(".1.3.6.1.2.1.2.2.1.5." + interfaceIndex);
            ObjectIdentifier oidType      = new ObjectIdentifier(".1.3.6.1.2.1.2.2.1.3." + interfaceIndex);
            ObjectIdentifier oidInOctets  = new ObjectIdentifier(".1.3.6.1.2.1.2.2.1.10. " + interfaceIndex);
            ObjectIdentifier oidOutOctets = new ObjectIdentifier(".1.3.6.1.2.1.2.2.1.16." + interfaceIndex);

            // OID's we're going to retrieve.
            List <Variable> oidList = new List <Variable>();

            oidList.Add(new Variable(oidSpeed));
            oidList.Add(new Variable(oidType));
            oidList.Add(new Variable(oidInOctets));
            oidList.Add(new Variable(oidOutOctets));

            long[] returnValue = new long[3];

            oidResults = snmp.GetOidValues(oidList);

            Integer32 vIfType = (Integer32)oidResults.Find(o => o.Id == oidType).Data;
            int       dIfType = vIfType.ToInt32();

            Gauge32  guageIfSpeed = (Gauge32)oidResults.Find(o => o.Id == oidSpeed).Data;
            Variable vInOctets    = oidResults.Find(o => o.Id == oidInOctets);
            Variable vOutOctets   = oidResults.Find(o => o.Id == oidOutOctets);

            if (dIfType != 94 && dIfType != 117 && dIfType != 6 && dIfType != 131)
            {
                return new long[] { 0, 0, 0 }
            }
            ;

            if (vInOctets.Data.TypeCode == SnmpType.NoSuchInstance || vOutOctets.Data.TypeCode == SnmpType.NoSuchInstance)
            {
                return(new long[] { 0, 0, 0 });
            }
            Counter32 counterInOctets  = (Counter32)vInOctets.Data;
            Counter32 counterOutOctets = (Counter32)vOutOctets.Data;

            returnValue[0] = Convert.ToInt64(guageIfSpeed.ToUInt32());
            returnValue[1] = Convert.ToInt64(counterInOctets.ToString());
            returnValue[2] = Convert.ToInt64(counterOutOctets.ToString());

            return(returnValue);
        }
Пример #32
0
        public void TestConstructor()
        {
            Integer32 test = new Integer32(100);

            Assert.Equal(100, test.ToInt32());
            Assert.Throws <InvalidCastException>(() => test.ToErrorCode());
            Assert.Throws <InvalidCastException>(() => new Integer32(-1).ToErrorCode());

            Integer32 test2 = new Integer32(new byte[] { 0x00 });

            Assert.Equal(0, test2.ToInt32());

            Integer32 test3 = new Integer32(new byte[] { 0xFF });

            Assert.Equal(-1, test3.ToInt32());
        }
Пример #33
0
        public void TestEqual()
        {
            var left  = new Integer32(599);
            var right = new Integer32(599);

            Assert.Equal(left, right);
// ReSharper disable RedundantCast
// ReSharper disable EqualExpressionComparison
            Assert.True((Integer32)null == (Integer32)null);
// ReSharper restore EqualExpressionComparison
// ReSharper restore RedundantCast
            Assert.NotEqual(null, right);
            Assert.NotEqual(left, null);
            Assert.True(left.Equals(right));
            Assert.True(left != null);
        }
Пример #34
0
        public void Generate()
        {
            var i      = new Integer32(300);
            var buffer = new MutableByte();

            i.Encode(buffer);

            var expected = new byte[]
            {
                SnmpConstants.SmiInteger,   // ASN.1 Type
                0x02,                       // Length
                0x01, 0x2C,                 // 300 in big endian
            };

            Assert.Equal(expected, buffer);
        }
Пример #35
0
        public static ISnmpData GetSnmpFromDotNet(object valeur)
        {
            ISnmpData data = null;

            if (valeur != null)
            {
                if (valeur is int)
                {
                    data = new Integer32((int)valeur);
                }
                else
                {
                    data = new OctetString(valeur.ToString());
                }
            }
            return(data);
        }
        /// <summary> Private implementation of getResponse.
        /// Has an Integer object as a parameter so we can distinguish
        /// the null and the message number case
        /// </summary>
//		private LdapMessage getResponse(System.Int32 msgid)
        private LdapMessage getResponse(Integer32 msgid)
        {
            System.Object  resp;
            RfcLdapMessage message;
            LdapMessage    response;

            if ((resp = agent.getLdapMessage(msgid)) == null)
            {
                // blocks
                return(null); // no messages from this agent
            }
            // Local error occurred, contains a LocalException
            if (resp is LdapResponse)
            {
                return((LdapMessage)resp);
            }
            // Normal message handling
            message = (RfcLdapMessage)resp;
            switch (message.Type)
            {
            case LdapMessage.SEARCH_RESPONSE:
                response = new LdapSearchResult(message);
                break;

            case LdapMessage.SEARCH_RESULT_REFERENCE:
                response = new LdapSearchResultReference(message);
                break;

            case LdapMessage.EXTENDED_RESPONSE:
                ExtResponseFactory fac = new ExtResponseFactory();
                response = ExtResponseFactory.convertToExtendedResponse(message);
                break;

            case LdapMessage.INTERMEDIATE_RESPONSE:
                response = IntermediateResponseFactory.convertToIntermediateResponse(message);
                break;

            default:
                response = new LdapResponse(message);
                break;
            }
            return(response);
        }
Пример #37
0
        private ISnmpData ConvertStringValue2SnmpData(SnmpType type, string value)
        {
            ISnmpData data;

            try
            {
                switch (type)
                {
                case SnmpType.Integer32:
                    data = new Integer32(int.Parse(value));
                    break;

                case SnmpType.Counter32:
                    data = new Counter32(uint.Parse(value));
                    break;

                case SnmpType.Gauge32:
                    data = new Gauge32(uint.Parse(value));
                    break;

                case SnmpType.TimeTicks:
                    data = new TimeTicks(uint.Parse(value));
                    break;

                case SnmpType.OctetString:
                    data = new OctetString(value);
                    break;

                case SnmpType.IPAddress:
                    data = new IP((IPAddress.Parse(value)).GetAddressBytes());
                    break;

                default:
                    throw new InvalidDataType();
                }
            }
            catch (InvalidCastException)
            {
                throw new InvalidDataType();
            }

            return(data);
        }
Пример #38
0
        public InformRequestPdu(int requestId, ObjectIdentifier enterprise, uint time, IList<Variable> variables)
        {
            if (enterprise == null)
            {
                throw new ArgumentNullException("enterprise");
            }

            if (variables == null)
            {
                throw new ArgumentNullException("variables");
            }

            Enterprise = enterprise;
            RequestId = new Integer32(requestId);
            _time = new TimeTicks(time);
            Variables = variables;
            IList<Variable> full = new List<Variable>(variables);
            full.Insert(0, new Variable(_timeId, _time));
            full.Insert(1, new Variable(_enterpriseId, Enterprise));
            _varbindSection = Variable.Transform(full);
        }
Пример #39
0
        /// <summary>
        /// Creates a <see cref="TrapV1Pdu"/> instance with PDU elements.
        /// </summary>
        /// <param name="enterprise">Enterprise</param>
        /// <param name="agent">Agent address</param>
        /// <param name="generic">Generic trap type</param>
        /// <param name="specific">Specific trap type</param>
        /// <param name="timestamp">Time stamp</param>
        /// <param name="variables">Variable binds</param>
        public TrapV1Pdu(ObjectIdentifier enterprise, IP agent, Integer32 generic, Integer32 specific, TimeTicks timestamp, IList<Variable> variables)
        {
            if (enterprise == null)
            {
                throw new ArgumentNullException("enterprise");
            }

            if (agent == null)
            {
                throw new ArgumentNullException("agent");
            }

            if (generic == null)
            {
                throw new ArgumentNullException("generic");
            }

            if (specific == null)
            {
                throw new ArgumentNullException("specific");
            }

            if (timestamp == null)
            {
                throw new ArgumentNullException("timestamp");
            }

            if (variables == null)
            {
                throw new ArgumentNullException("variables");
            }

            Enterprise = enterprise;
            AgentAddress = agent;
            _generic = generic;
            _specific = specific;
            TimeStamp = timestamp;
            _varbindSection = Variable.Transform(variables);
            Variables = variables;
        }
Пример #40
0
 private void configPduVb(LeafVarBinding leafVb, Pdu pdu)
 {
     System.Collections.Generic.IEnumerator <string> enumerator = leafVb.VarBindings.Keys.GetEnumerator();
     while (enumerator.MoveNext())
     {
         string current = enumerator.Current;
         if (pdu.Type == PduType.Set)
         {
             object  obj   = leafVb.VarBindings[current];
             AsnType value = null;
             if (obj is string)
             {
                 value = new OctetString(System.Convert.ToString(obj));
             }
             else
             {
                 if (obj is int)
                 {
                     value = new Integer32(System.Convert.ToInt32(obj));
                 }
                 else
                 {
                     if (obj is System.Net.IPAddress)
                     {
                         value = new IpAddress(obj as System.Net.IPAddress);
                     }
                 }
             }
             pdu.VbList.Add(new Oid(current), value);
         }
         else
         {
             pdu.VbList.Add(current);
         }
     }
 }
Пример #41
0
        /// <summary>Used to create correct variable type object for the specified encoded type</summary>
        /// <param name="asnType">ASN.1 type code</param>
        /// <returns>A new object matching type supplied or null if type was not recognized.</returns>
        public static AsnType GetSyntaxObject(SMIDataTypeCode asnType)
        {
            AsnType obj = null;
            if (asnType == SMIDataTypeCode.Integer)
                obj = new Integer32 ();
            else if (asnType == SMIDataTypeCode.Counter32)
                obj = new Counter32 ();
            else if (asnType == SMIDataTypeCode.Gauge32)
                obj = new Gauge32 ();
            else if (asnType == SMIDataTypeCode.Counter64)
                obj = new Counter64 ();
            else if (asnType == SMIDataTypeCode.TimeTicks)
                obj = new TimeTicks ();
            else if (asnType == SMIDataTypeCode.OctetString)
                obj = new OctetString ();
            else if (asnType == SMIDataTypeCode.Opaque)
                obj = new Opaque ();
            else if (asnType == SMIDataTypeCode.IPAddress)
                obj = new IpAddress ();
            else if (asnType == SMIDataTypeCode.ObjectId)
                obj = new Oid ();
            else if (asnType == SMIDataTypeCode.PartyClock)
                obj = new V2PartyClock ();
            else if (asnType == SMIDataTypeCode.NoSuchInstance)
                obj = new NoSuchInstance ();
            else if (asnType == SMIDataTypeCode.NoSuchObject)
                obj = new NoSuchObject ();
            else if (asnType == SMIDataTypeCode.EndOfMibView)
                obj = new EndOfMibView ();
            else if (asnType == SMIDataTypeCode.Null)
            {
                obj = new Null ();
            }

            return obj;
        }
Пример #42
0
        public void SetStringBad()
        {
            var i1 = new Integer32(10);

            Assert.Throws <ArgumentException>(() => { i1.Set("Bad"); });
        }
Пример #43
0
        public void ConvertToString()
        {
            var i1 = new Integer32(10);

            Assert.Equal("10", i1.ToString());
        }
 internal static extern int SHGetFileInfo(string pszPath, Integer32 dwFileAttributes, ref SHFILEINFO psfi, Integer32 cbFileInfo, Integer32 uFlags);
Пример #45
0
 public void TestToBytes2()
 {
     Integer32 i = new Integer32(-1);
     Assert.AreEqual(new byte[] {0x02, 0x01, 0xFF}, i.ToBytes());
 }
Пример #46
0
        private void ConstructListByIP(IpAddress agentIP, string equipName)
        {
            if (string.IsNullOrEmpty(equipName))
            {
                try
                {
                    equipName = App.idAndEquipList[App.ipAndIPinfoList[agentIP.ToString()].EquipIndex].Name;
                }
                catch { }
            }
            ocInterfaces.Clear();
            OctetString     community = new OctetString(App.snmpCommunity);
            AgentParameters param     = new AgentParameters(community);

            param.DisableReplySourceCheck = !App.snmpCheckSrcFlag;
            // Set SNMP version to 2 (GET-BULK only works with SNMP ver 2 and 3)
            param.Version = SnmpVersion.Ver2;
            // Construct target

            UdpTarget target = new UdpTarget((IPAddress)agentIP, App.snmpPort, App.snmpTimeout, App.snmpRetry);

            // Define Oid that is the root of the MIB
            //  tree you wish to retrieve
            Oid rootOid = new Oid("1.3.6.1.2.1.2.2.1.1"); // ifIndex

            // This Oid represents last Oid returned by
            //  the SNMP agent
            Oid lastOid = (Oid)rootOid.Clone();

            // Pdu class used for all requests
            Pdu pdu = new Pdu(PduType.GetBulk);

            // In this example, set NonRepeaters value to 0
            pdu.NonRepeaters = 0;
            // MaxRepetitions tells the agent how many Oid/Value pairs to return
            // in the response.
            pdu.MaxRepetitions = 5;

            // Loop through results
            while (lastOid != null)
            {
                // When Pdu class is first constructed, RequestId is set to 0
                // and during encoding id will be set to the random value
                // for subsequent requests, id will be set to a value that
                // needs to be incremented to have unique request ids for each
                // packet
                if (pdu.RequestId != 0)
                {
                    pdu.RequestId += 1;
                }
                // Clear Oids from the Pdu class.
                pdu.VbList.Clear();
                // Initialize request PDU with the last retrieved Oid
                pdu.VbList.Add(lastOid);
                // Make SNMP request
                SnmpV2Packet result = null;
                try
                {
                    result = (SnmpV2Packet)target.Request(pdu, param);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("获取SNMP应答出现错误\n" + ex.Message);
                    target.Close();
                    return;
                }
                // You should catch exceptions in the Request if using in real application.

                // If result is null then agent didn't reply or we couldn't parse the reply.
                if (result != null)
                {
                    // ErrorStatus other then 0 is an error returned by
                    // the Agent - see SnmpConstants for error definitions
                    if (result.Pdu.ErrorStatus != 0)
                    {
                        // agent reported an error with the request
                        MessageBox.Show(string.Format("SNMP应答数据包中有错误。 Error {0} index {1}", result.Pdu.ErrorStatus, result.Pdu.ErrorIndex));
                        lastOid = null;
                        break;
                    }
                    else
                    {
                        // Walk through returned variable bindings
                        foreach (Vb v in result.Pdu.VbList)
                        {
                            // Check that retrieved Oid is "child" of the root OID
                            if (rootOid.IsRootOf(v.Oid))
                            {
                                if (v.Value.Type == SnmpConstants.SMI_ENDOFMIBVIEW)
                                {
                                    lastOid = null;
                                }
                                else
                                {
                                    lastOid = v.Oid;
                                }
                                Integer32 f    = v.Value as Integer32;
                                Interface intf = new Interface(agentIP);
                                intf.EquipName = equipName;
                                //intf.TimerInteral = double.Parse(cbbTimerInterval.Text);
                                ocInterfaces.Add(f, intf);
                            }
                            else
                            {
                                // we have reached the end of the requested
                                // MIB tree. Set lastOid to null and exit loop
                                lastOid = null;
                                break; // 每个数据包获取5个值,一旦有一个不是这一列的数据,后面的应该都不是了
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("指定网管代理未返回有效信息");
                }
            }
            target.Close();
            string errorMessage;

            foreach (Integer32 i in ocInterfaces.Keys)
            {
                string       strOid = "1.3.6.1.2.1.2.2.1.2." + i.ToString();
                VbCollection vbc    = SnmpHelper.GetResultsFromOids(agentIP, new string[] { strOid }, out errorMessage);
                ocInterfaces[i].Descr   = vbc[0].Value.ToString();
                ocInterfaces[i].IfIndex = i;
            }
        }
Пример #47
0
        internal System.Object getLdapMessage(Integer32 msgId)
        {
            System.Object rfcMsg;
            // If no messages for this agent, just return null
            if (messages.Count == 0)
            {
                return(null);
            }
            if (msgId != null)
            {
                // Request messages for a specific ID
                try
                {
                    // Get message for this ID
//					Message info = messages.findMessageById(msgId);
                    Message info = messages.findMessageById(msgId.intValue);
                    rfcMsg = info.waitForReply();                     // blocks for a response
                    if (!info.acceptsReplies() && !info.hasReplies())
                    {
                        // Message complete and no more replies, remove from id list
                        SupportClass.VectorRemoveElement(messages, info);
                        info.Abandon(null, null);                         // Get rid of resources
                    }
                    else
                    {
                    }
                    return(rfcMsg);
                }
                catch (System.FieldAccessException ex)
                {
                    // no such message id
                    return(null);
                }
            }
            else
            {
                // A msgId was NOT specified, any message will do
                lock (messages.SyncRoot)
                {
                    while (true)
                    {
                        int     next = indexLastRead + 1;
                        Message info;
                        for (int i = 0; i < messages.Count; i++)
                        {
                            if (next >= messages.Count)
                            {
                                next = 0;
                            }
                            info          = (Message)messages[next];
                            indexLastRead = next++;
                            rfcMsg        = info.Reply;
                            // Check this request is complete
                            if (!info.acceptsReplies() && !info.hasReplies())
                            {
                                // Message complete & no more replies, remove from id list
                                SupportClass.VectorRemoveElement(messages, info);         // remove from list
                                info.Abandon(null, null);                                 // Get rid of resources
                                // Start loop at next message that is now moved
                                // to the current position in the Vector.
                                i -= 1;
                            }
                            if (rfcMsg != null)
                            {
                                // We got a reply
                                return(rfcMsg);
                            }
                            else
                            {
                                // We found no reply here
                            }
                        }                         // end for loop */
                        // Messages can be removed in this loop, we we must
                        // check if any messages left for this agent
                        if (messages.Count == 0)
                        {
                            return(null);
                        }

                        // No data, wait for something to come in.
                        try
                        {
                            System.Threading.Monitor.Wait(messages.SyncRoot, TimeSpan.FromSeconds(40));
                        }
                        catch (System.Threading.ThreadInterruptedException ex)
                        {
                        }
                    }             /* end while */
                }                 /* end synchronized */
            }
        }
Пример #48
0
        /// <summary>
        /// Reset the class. Initialize all member values to class defaults.
        /// </summary>
        public void Reset()
        {
            _engineId = new OctetString();
            _engineBoots = new Integer32();
            _engineTime = new Integer32();

            _engineTimeStamp = DateTime.MinValue;

            _privacyProtocol = PrivacyProtocols.None;
            _authenticationProtocol = AuthenticationDigests.None;

            _privacySecret = new MutableByte();
            _authenticationSecret = new MutableByte();

            _contextEngineId = new OctetString();
            _contextName = new OctetString();
            _securityName = new OctetString();

            // max message size is initialized to 64KB by default. It will be
            // to the smaller of the two values after discovery process
            _maxMessageSize = new Integer32(64 * 1024);

            _reportable = true;

            _privacyKey = null;
            _authenticationKey = null;
        }
Пример #49
0
        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;

            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("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:", "-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;
                }
            }

            if ((extra.Count - 1) % 3 != 0)
            {
                Console.WriteLine("invalid variable number: " + (extra.Count - 1));
                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]));
                        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)
                {
                    priv = new DESPrivacyProvider(new OctetString(privPhrase), auth);
                }
                else
                {
                    priv = new DefaultPrivacyProvider(auth);
                }

                Discovery     discovery = Messenger.NextDiscovery;
                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 response = request.GetResponse(timeout, receiver);
                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);
            }
        }
Пример #50
0
        public void TestToBytes2()
        {
            Integer32 i = new Integer32(-1);

            Assert.Equal(new byte[] { 0x02, 0x01, 0xFF }, i.ToBytes());
        }
Пример #51
0
 public TrapV1Pdu(uint[] enterprise, IP agent, Integer32 generic, Integer32 specific, TimeTicks timestamp, IList<Variable> variables)
     : this(new ObjectIdentifier(enterprise), agent, generic, specific, timestamp, variables) 
 {
 }
Пример #52
0
        public void SetStringEmpty()
        {
            var i1 = new Integer32(10);

            Assert.Throws <ArgumentOutOfRangeException>(() => { i1.Set(string.Empty); });
        }
Пример #53
0
 internal static extern Integer32 DwmGetWindowAttribute(Integer hwnd, DWMWINDOWATTRIBUTE dwAttribute, out Integer32 pvAttribute, Integer32 cbAttribute);
Пример #54
0
        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 NET452
                    priv = new DESPrivacyProvider(new OctetString(privPhrase), auth);
#else
                    Console.WriteLine("DES (ECB) is not supported by .NET Core.");
                    return;
#endif
                }
                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);
            }
        }
Пример #55
0
        private List <Variable> BuildVariableList(Command command, List <string> values)
        {
            List <Variable> variables = new List <Variable>();

            if (command == Command.Get)
            {
                for (int i = 1; i < values.Count; i++)
                {
                    Variable test = new Variable(new ObjectIdentifier(values[i]));
                    variables.Add(test);
                }
            }
            else
            {
                for (int i = 1; i < values.Count; i = i + 3)
                {
                    string type = values[i + 1];
                    if (type.Length != 1)
                    {
                        throw new InvalidOperationException("SNMP Error: Invalid type string: " + type);
                    }

                    ISnmpData data;
                    switch (type[0])
                    {
                    case 'i':
                        data = new Integer32(int.Parse(values[i + 2]));
                        break;

                    case 'u':
                        data = new Gauge32(uint.Parse(values[i + 2]));
                        break;

                    case 't':
                        data = new TimeTicks(uint.Parse(values[i + 2]));
                        break;

                    case 'a':
                        data = new IP(IPAddress.Parse(values[i + 2]));
                        break;

                    case 'o':
                        data = new ObjectIdentifier(values[i + 2]);
                        break;

                    case 'x':
                        data = new OctetString(ByteTool.Convert(values[i + 2]));
                        break;

                    case 's':
                        data = new OctetString(values[i + 2]);
                        break;

                    case 'd':
                        data = new OctetString(ByteTool.ConvertDecimal(values[i + 2]));
                        break;

                    case 'n':
                        data = new Null();
                        break;

                    default:
                        throw new InvalidOperationException("SNMP Error: Unknown type string: " + type[0]);
                    }

                    Variable test = new Variable(new ObjectIdentifier(values[i]), data);
                    variables.Add(test);
                }
            }

            return(variables);
        }
Пример #56
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TrapV1Pdu"/> class.
        /// </summary>
        /// <param name="length">The length data.</param>
        /// <param name="stream">The stream.</param>
        public TrapV1Pdu(Tuple<int, byte[]> length, Stream stream)
        {
            if (length == null)
            {
                throw new ArgumentNullException("length");
            }

            if (stream == null) 
            {
                throw new ArgumentNullException("stream");
            }
            
            Enterprise = (ObjectIdentifier)DataFactory.CreateSnmpData(stream);
            AgentAddress = (IP)DataFactory.CreateSnmpData(stream);
            _generic = (Integer32)DataFactory.CreateSnmpData(stream);
            _specific = (Integer32)DataFactory.CreateSnmpData(stream);
            TimeStamp = (TimeTicks)DataFactory.CreateSnmpData(stream);
            _varbindSection = (Sequence)DataFactory.CreateSnmpData(stream);
            Variables = Variable.Transform(_varbindSection);
            _length = length.Item2;
        }
Пример #57
0
 public void Visit(Integer32 value)
 {
     value.TypedValue = mBitsReader.ReadInt32(value.BitsCount);
 }
Пример #58
0
 /// <summary>
 /// Standard constructor
 /// </summary>
 public AgentParameters()
 {
     _version   = new Integer32((int)SnmpVersion.Ver1);
     _community = new OctetString("public");
     _disableReplySourceCheck = false;
 }
Пример #59
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="oid"></param>
 /// <param name="value"></param>
 /// <param name="trapsEps"></param>
 public SnmpIntObject(string oid, int value, params IPEndPoint[] trapsEps)
     : base(oid)
 {
     _data     = new Integer32(value);
     _trapsEps = trapsEps;
 }