我在寫一個SNMP v3陷阱/通知使用snmp4j進行身份驗證的發件人,但我很驚訝即使存在身份驗證失敗也能正確確認通知。我還使用snmp4j開發了陷阱接收器來幫助我進行調試。無法通過snmp4j正確使用SNMP身份驗證
我注意到一些意想不到的情況:
1日的情況:發送含有認證/ NoPriv的INFORM,未知的用戶名或密碼錯誤=>的INFORM不承認,但只是沒有反應,發件人必須等待超時。然而,在接收端,AuthenticationFailureEvent被觸發,但我會預料到snmp4j會向發件人迴應一些錯誤。重寫方法processPdu未被調用。我想這可能取決於接收器的實現,或者有一個標準的行爲呢?
第二場景:發送與現有的用戶名但沒有密碼(用NOAUTH/NoPriv)的INFORM,而它與接收器上的=>的INFORM被確認與響應,而沒有任何錯誤,我的阱配置密碼接收者甚至不會像應該那樣觸發AuthenticationFailureEvent。 我希望接收者拒絕請求,如果它是未經驗證的。我忘了初始化什麼?我無法想象在snmp4j中有這樣的安全漏洞。
我使用的初始化接收器的代碼:(我也不在這裏展示重載方法processPdu和有authenticationFailure)
EmbeddedSNMPReceiver(final int port, final Optional<UsmUser> user) throws IOException {
final MessageDispatcherImpl dispatcher = new MessageDispatcherImpl();
dispatcher.addAuthenticationFailureListener(this);
final UdpAddress listenAddress = new UdpAddress("localhost/" + port);
final TransportMapping transport = new DefaultUdpTransportMapping(listenAddress);
SecurityProtocols.getInstance().addDefaultProtocols();
final USM usm = new USM(SecurityProtocols.getInstance(), new OctetString("RECEIVER"), 0);
snmp = new Snmp(dispatcher, transport);
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3(usm));
SecurityModels.getInstance().addSecurityModel(usm);
if (user.isPresent()) {
snmp.getUSM().addUser(user.get().getSecurityName(), user.get());
}
snmp.addCommandResponder(this);
snmp.listen();
}
public static void main(String[] args) {
// FOR DEBUG
try {
final OctetString octUsername = new OctetString("zaza");
final OID userAuthOID = AuthSHA.ID;
final OctetString octUserPassphrase = new OctetString("12345678");
final UsmUser user = new UsmUser(octUsername, userAuthOID, octUserPassphrase, null, null);
final EmbeddedSNMPReceiver server = new EmbeddedSNMPReceiver(1099, Optional.of(user));
Thread.sleep(500000);
server.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
PS:爲了澄清,我開始接收器在一個單獨的進程比發件人以避免與snmp4j有狀態/單身問題...
(抱歉,延遲迴復);所以,第一意味着我無法知道有認證問題?第二個似乎是與我有關的發現問題,但我認爲所有的發現過程都是透明地由snmp4j處理的。感謝您指出 – Joel
@Joel是的,沒辦法知道客戶端是否存在身份驗證問題。 –