/// <summary> /// Construct and send SNMP v3 noAuthNoPriv Trap /// </summary> /// <param name="receiver">Trap receiver IP address</param> /// <param name="receiverPort">Trap receiver UDP port number</param> /// <param name="engineId">Sender SNMP engineId</param> /// <param name="senderEngineBoots">Sender SNMP engine boots</param> /// <param name="senderEngineTime">Sender SNMP engine time</param> /// <param name="senderUserName">Security (user) name</param> /// <param name="senderUpTime">Sender upTime</param> /// <param name="trapObjectID">Trap object ID</param> /// <param name="varList">Variable binding list</param> public void SendV3Trap(IpAddress receiver, int receiverPort, byte[] engineId, Int32 senderEngineBoots, Int32 senderEngineTime, string senderUserName, UInt32 senderUpTime, Oid trapObjectID, VbCollection varList) { SnmpV3Packet packet = new SnmpV3Packet(); packet.Pdu.Type = PduType.V2Trap; packet.NoAuthNoPriv(ASCIIEncoding.UTF8.GetBytes(senderUserName)); packet.SetEngineId(engineId); packet.SetEngineTime(senderEngineBoots, senderEngineTime); packet.ScopedPdu.TrapObjectID.Set(trapObjectID); packet.ScopedPdu.TrapSysUpTime.Value = senderUpTime; packet.ScopedPdu.VbList.Add(varList); packet.MsgFlags.Reportable = false; SendV3Trap(packet, receiver, receiverPort); }
/// <summary> /// InitializePacket SNMP packet with values from this class. Works only on SNMP version 3 packets. /// </summary> /// <param name="packet">Instance of <see cref="SnmpV3Packet"/></param> /// <exception cref="SnmpInvalidVersionException">Thrown when parameter packet is not SnmpV3Packet</exception> public void InitializePacket(SnmpPacket packet) { if (packet is SnmpV3Packet) { SnmpV3Packet pkt = (SnmpV3Packet)packet; bool isAuth = (_authenticationProtocol == AuthenticationDigests.None) ? false : true; bool isPriv = (_privacyProtocol == PrivacyProtocols.None) ? false : true; if (isAuth && isPriv) { pkt.authPriv(_securityName, _authenticationSecret, _authenticationProtocol, _privacySecret, _privacyProtocol); } else if (isAuth && !isPriv) { pkt.authNoPriv(_securityName, _authenticationSecret, _authenticationProtocol); } else { pkt.NoAuthNoPriv(_securityName); } pkt.USM.EngineId.Set(_engineId); pkt.USM.EngineBoots = _engineBoots.Value; pkt.USM.EngineTime = GetCurrentEngineTime(); pkt.MaxMessageSize = _maxMessageSize.Value; pkt.MsgFlags.Reportable = _reportable; if (_contextEngineId.Length > 0) { pkt.ScopedPdu.ContextEngineId.Set(_contextEngineId); } else { pkt.ScopedPdu.ContextEngineId.Set(_engineId); } if (_contextName.Length > 0) { pkt.ScopedPdu.ContextName.Set(_contextName); } else { pkt.ScopedPdu.ContextName.Reset(); } } else { throw new SnmpInvalidVersionException("Invalid SNMP version."); } }
/// <summary> /// Prepare packet for transmission by filling target specific information in the packet. /// </summary> /// <param name="packet">SNMP packet class for the required version</param> /// <returns>True if packet values are correctly set, otherwise false.</returns> public bool PreparePacketForTransmission(SnmpPacket packet) { if (packet is SnmpV3Packet) { SnmpV3Packet pkt = (SnmpV3Packet)packet; bool isAuth = (_authenticationProtocol == AuthenticationDigests.None) ? false : true; bool isPriv = (_privacyProtocol == PrivacyProtocols.None) ? false : true; if (isAuth && isPriv) { pkt.authPriv(_securityName, _authenticationSecret, _authenticationProtocol, _privacySecret, _privacyProtocol); } else if (isAuth && !isPriv) { pkt.authNoPriv(_securityName, _authenticationSecret, _authenticationProtocol); } else { pkt.NoAuthNoPriv(_securityName); } pkt.USM.EngineId.Set(_engineId); pkt.USM.EngineBoots = _engineBoots.Value; pkt.USM.EngineTime = GetCurrentEngineTime(); pkt.MaxMessageSize = _maxMessageSize.Value; pkt.MsgFlags.Reportable = _reportable; if (_contextEngineId.Length > 0) { pkt.ScopedPdu.ContextEngineId.Set(_contextEngineId); } else { pkt.ScopedPdu.ContextEngineId.Set(_engineId); } if (_contextName.Length > 0) { pkt.ScopedPdu.ContextName.Set(_contextName); } else { pkt.ScopedPdu.ContextName.Reset(); } } return(false); }