使用Dart Power SNMP读取表索引值

时间:2013-10-09 09:06:40

标签: snmp dart-communications

我有以下代码来获取表数据。我不知道如何获取表索引值。 GetTable只返回锯齿状变量数组列表。  请建议如何获取每一行的表索引。

 var snmpVaraibles = slave.GetTable(
                                    oid,
                                    SnmpVersion.Three,
                                    null,
                                    new Security
                                        {
                                            Username = "myuser",
                                            AuthenticationPassword =  "Password1234",
                                            AuthenticationProtocol = AuthenticationProtocol.Md5,
                                            PrivacyPassword = "Pswd",
                                            PrivacyProtocol = PrivacyProtocol.Des
                                        },
                                    new IPEndPoint(IPAddress.Parse(ipAddress), port), retries, maxRepetition);



    for (var i = 0; i <= rows; i++)
                            {
                                var mibTableEntry = new MIBTableEntryEntity();

                                for (var j = 0; j <= columns; j++)
                                {
                                    var dartVariable = snmpVariables[i, j];
                                    try
                                    {
                                        string value;
                                        if (dartVariable.Definition !=null && !string.IsNullOrEmpty(dartVariable.Definition.Syntax) && dartVariable.Definition.Syntax.Equals("OctetString") && !string.IsNullOrEmpty(dartVariable.Value.ToString()))
                                        {
                                            var val = (OctetString) dartVariable.Value;
                                            value = string.Compare(dartVariable.Definition.ComposedSyntax, "displaystring", true) == 0
                                                    ? val.ToString() : MACAddress.ToHexString(val.Value);
                                        }
                                        else
                                        {
                                            value = dartVariable.Value.ToString();
                                        }

                                        value = value.Trim().TrimEnd(new char[] {'\0'});

                                        var dartVariableMib = new MIBObjectEntity
                                                                  {
                                                                      Description = dartVariable.Definition != null ? dartVariable.Definition.Description : null,
                                                                      IsLoaded = true,
                                                                      Name = dartVariable.Definition != null ? dartVariable.Definition.Name : null
                                                                  };

                                        var snmpVariable = new MIBVariableEntity
                                                               {
                                                                   Definition = dartVariableMib,
                                                                   Id = dartVariable.Id,
                                                                   IsLoaded = true,
                                                                   Value = value,
                                                                   ValueName = dartVariable.ValueName
                                                               };

                                        mibTableEntry.Variables.Add(snmpVariable);
                                    }
                                    catch (Exception ex)
                                    {
                                        _log.Error(ex);
                                    }
                                }

1 个答案:

答案 0 :(得分:0)

我已经改变了这样的for循环。因为索引值被添加到每个列snmp变量的id中,如此(columnoid +“。”+ index_value)。 我们可以删除columnoid +“。”来自Id,这将返回索引值。 如果我在这里错了,请纠正我。

var rows = snmpVariables.GetUpperBound( 0 );
var columns = snmpVariables.GetUpperBound( 1 );

for ( var i = 0; i <= rows; i++ )
{

    var mibTableEntry = new MIBTableEntryEntity();


    for ( var j = 0; j <= columns; j++ )
    {
        //Fetching index - Begin
        var dartVariable = snmpVariables[i, j];

        if ( j == 0 && dartVariable.Definition != null && !string.IsNullOrEmpty( dartVariable.Definition.Oid ) && !string.IsNullOrEmpty( dartVariable.Id ) )
        {
            mibTableEntry.IndexValue = dartVariable.Id.Replace( string.Concat( dartVariable.Definition.Oid, "." ), "" );
        }

        //Fetching index End

        try
        {
            string value;
            if ( dartVariable.Definition != null && !string.IsNullOrEmpty( dartVariable.Definition.Syntax ) && dartVariable.Definition.Syntax.Equals( "OctetString" ) && !string.IsNullOrEmpty( dartVariable.Value.ToString() ) )
            {
                var val = ( OctetString )dartVariable.Value;
                value = string.Compare( dartVariable.Definition.ComposedSyntax, "displaystring", true ) == 0
                        ? val.ToString() : MACAddress.ToHexString( val.Value );
            }
            else
            {
                value = dartVariable.Value.ToString();
            }

            value = value.Trim().TrimEnd( new char[] { '\0' } );

            var dartVariableMib = new MIBObjectEntity
            {
                Description = dartVariable.Definition != null ? dartVariable.Definition.Description : null,
                IsLoaded = true,
                Name = dartVariable.Definition != null ? dartVariable.Definition.Name : null
            };

            var snmpVariable = new MIBVariableEntity
            {
                Definition = dartVariableMib,
                Id = dartVariable.Id,
                IsLoaded = true,
                Value = value,
                ValueName = dartVariable.ValueName
            };

            mibTableEntry.Variables.Add( snmpVariable );
        }
    }
}