微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SNMP V3 创建服务器和客户端的问题 (SharpSnmpLib)

如何解决SNMP V3 创建服务器和客户端的问题 (SharpSnmpLib)

我正在使用 SharpSnmpLib 创建一个 snmp 服务器和客户端。我已经让 V1 和 V2 使用下面的代码,但是 V3 有问题,因为它返回格式错误的消息。

我的服务器为每个设备创建一个侦听器。这是我的服务器:

GetMessageHandler handler = new GetMessageHandler();
GetBulkMessageHandler bulkMessageHandler = new GetBulkMessageHandler();

HandlerMapping hm = new HandlerMapping("v1","GET",handler);
HandlerMapping hm2 = new HandlerMapping("v1","GETNEXT",handler);
HandlerMapping hm3 = new HandlerMapping("v2",handler);
HandlerMapping hm4 = new HandlerMapping("v2",handler);
HandlerMapping hm5 = new HandlerMapping("v2,v3","GETBULK",handler);
HandlerMapping hm6 = new HandlerMapping("v3",bulkMessageHandler);

List<HandlerMapping> hmList = new List<HandlerMapping> {hm,hm2,hm3,hm4,hm5,hm6};

List <IMembershipProvider> memberships = new List<IMembershipProvider>();

MessageHandlerFactory mhf = new MessageHandlerFactory(hmList.ToArray());

Version1MembershipProvider v1 = new Version1MembershipProvider(new OctetString(community),new OctetString(community));
Version2MembershipProvider v2 = new Version2MembershipProvider(new OctetString(community),new OctetString(community));
Version3MembershipProvider v3 = new Version3MembershipProvider();

memberships.Add(v1);
memberships.Add(v2);
memberships.Add(v3);

ComposedMembershipProvider membershipProviders = new ComposedMembershipProvider(memberships.ToArray());

SnmpApplicationFactory factory = new SnmpApplicationFactory(store,membershipProviders,mhf);

EngineGroup eg = new EngineGroup();

Listener l = new Listener();

l.MessageReceived += l_MessageReceived;
l.ExceptionRaised += l_ExceptionRaised;

engine = new SnmpEngine(factory,l,eg);

engine.ExceptionRaised += engine_ExceptionRaised;

engine.Listener.ClearBindings();

engine.Listener.AddBinding(new System.Net.IPEndPoint("127.0.0.1",161));

engine.Start();

这是我的客户:

private IPrivacyProvider CreateAuthProvider()
{
    Levels securityLevel = Levels.Authentication  | Levels.Privacy | Levels.Reportable;
    
    IAuthenticationProvider auth = MD5AuthenticationProvider(new OctetString("abc1234"));
    
    IPrivacyProvider privAuth;
    
    if ((securityLevel & Levels.Privacy) == Levels.Privacy)
    {
        if (DESPrivacyProvider.IsSupported)
        {
            privAuth = new DESPrivacyProvider(new OctetString("abc1234"),auth);
        }
        else
        {
            privAuth = null;
        }
    }
    else
    {
        privAuth = new DefaultPrivacyProvider(auth);
    }

    return privAuth;
}


IPrivacyProvider privAuth;

privAuth = CreateAuthProvider();

discovery discoveryAuth = Messenger.GetNextdiscovery(SnmpType.GetBulkRequestPdu);
ReportMessage reportMessgae = discoveryAuth.GetResponse(config.Timeout,new IPEndPoint(127.0.0.1,161));

var serverEndPoint = new IPEndPoint(127.0.0.1,161);

GetBulkRequestMessage message = new GetBulkRequestMessage(VersionCode.V3,new OctetString("newUser"),10,new ObjectIdentifier("1.3.6.1.4.1.37805.1.1.0.1"),privAuth,Messenger.MaxMessageSize,reportMessgae);
ISnmpMessage response = message.GetResponse(10000,serverEndPoint);

if (response.Pdu().ErrorStatus.ToInt32() != 0)
{
   throw ErrorException.Create(
       "Error in response of SNMP GET Bulk Request for V3",address,response);
}

如果有人能解释这为什么有效,我可以清楚地获得 V1 和 V2 数据,但没有获得任何 V3 数据,那就太好了。当我为 V3 进行调试时,连接似乎是活动的,但我没有做正确的事情(也许是解密?)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。