From f8bf4b10fb03d47984c2ccdc81715c0170677ecf Mon Sep 17 00:00:00 2001 From: waner Date: Thu, 15 May 2025 13:58:53 +0800 Subject: [PATCH] fix --- pom.xml | 33 +++----------- .../java/com/sunyard/snmp/SnmpTrapSender.java | 18 +++++--- .../java/racal/sunyard/main/SydApi4j.java | 43 +++++++++++++++---- src/test/java/sample/Test4NongxinCW.java | 35 +++++++-------- 4 files changed, 70 insertions(+), 59 deletions(-) diff --git a/pom.xml b/pom.xml index d0d8756..ddb6e24 100644 --- a/pom.xml +++ b/pom.xml @@ -94,33 +94,12 @@ gson 2.13.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - + + ch.qos.logback + logback-classic + 1.3.15 + compile + diff --git a/src/main/java/com/sunyard/snmp/SnmpTrapSender.java b/src/main/java/com/sunyard/snmp/SnmpTrapSender.java index 06da41e..b9e17ea 100644 --- a/src/main/java/com/sunyard/snmp/SnmpTrapSender.java +++ b/src/main/java/com/sunyard/snmp/SnmpTrapSender.java @@ -1,6 +1,8 @@ package com.sunyard.snmp; import org.snmp4j.*; +import org.snmp4j.event.ResponseEvent; +import org.snmp4j.event.ResponseListener; import org.snmp4j.mp.*; import org.snmp4j.security.*; import org.snmp4j.smi.*; @@ -40,33 +42,35 @@ public class SnmpTrapSender implements AutoCloseable{ snmp.listen(); } - public void sendTrap(String message, int severity) throws IOException { + public ResponseEvent sendTrap(String message, int severity) throws IOException { + ResponseEvent event = null; switch (version) { case SnmpConstants.version1: - sendV1Trap(message, severity); + event = sendV1Trap(message, severity); break; case SnmpConstants.version2c: - sendV2Trap(message, severity); + event = sendV2Trap(message, severity); break; default: throw new IllegalArgumentException("不支持的SNMP版本"); } + return event; } - private void sendV1Trap(String message, int severity) throws IOException { + private ResponseEvent sendV1Trap(String message, int severity) throws IOException { CommunityTarget target = createCommunityTarget(SnmpConstants.version1); PDUv1 pdu = new PDUv1(); configureCommonTrap(pdu, message, severity); pdu.setGenericTrap(PDUv1.ENTERPRISE_SPECIFIC); - snmp.send(pdu, target); + return snmp.send(pdu, target); } - private void sendV2Trap(String message, int severity) throws IOException { + private ResponseEvent sendV2Trap(String message, int severity) throws IOException { CommunityTarget target = createCommunityTarget(SnmpConstants.version2c); PDU pdu = new PDU(); configureCommonTrap(pdu, message, severity); pdu.setType(PDU.TRAP); - snmp.send(pdu, target); + return snmp.send(pdu, target); } diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java index d51d31a..f48d4dd 100644 --- a/src/main/java/racal/sunyard/main/SydApi4j.java +++ b/src/main/java/racal/sunyard/main/SydApi4j.java @@ -30,6 +30,11 @@ import org.bouncycastle.asn1.cms.ContentInfo; import org.bouncycastle.cms.SydCmsUtil; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.snmp4j.PDU; +import org.snmp4j.event.ResponseEvent; +import org.snmp4j.mp.SnmpConstants; import racal.sunyard.main.dto.DTO77; import racal.sunyard.main.dto.DTO78; import racal.sunyard.main.dto.DTO79; @@ -61,6 +66,8 @@ import static org.bouncycastle.asn1.ASN1Encoding.DL; public class SydApi4j implements SydApi { + private final static Logger log = LoggerFactory.getLogger(SydApi4j.class); + static { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); } @@ -1320,19 +1327,31 @@ public class SydApi4j implements SydApi { addressList.stream().map(p -> createTaskContext(p, timeout, cert)).collect(Collectors.toList()); AsyncTaskExecutor executor = new AsyncTaskExecutor(); List> taskOutcomes = executor.execBatchTasks(taskContexts); + executor.shutdown(); //失败的记录日志 List failures = new ArrayList<>(); StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("日期:").append(LocalDateTime.now()).append("\n"); for (TaskOutcome taskOutcome : taskOutcomes) { if (!taskOutcome.isSuccess()) { failures.add(taskOutcome.getContext().getAddress()); - stringBuilder.append("ip:").append(taskOutcome.getContext().getAddress()).append("/证书导入失败:").append(taskOutcome.getError().getMessage()).append("\n"); + stringBuilder.append("签名服务器:").append(taskOutcome.getContext().getAddress()).append("/导入失败:").append(taskOutcome.getError().getMessage()).append("\n"); } } if (!failures.isEmpty()) { + String dn = ""; + String serialNumber = ""; + X509Certificate certificate = null; + try { + certificate = CertUtil.convertToX509Cert(cert); + dn = certificate.getSubjectDN().toString(); + serialNumber = certificate.getSerialNumber().toString(); + } catch (Exception e) { + log.info("证书格式错误!"); + } //记录失败日志 - stringBuilder.append("行号:").append(bkCode).append("\n").append("证书:").append(cert); + stringBuilder.append("行号:").append(bkCode).append("\n").append("DN:").append(dn) + .append("\n序列号:").append(serialNumber).append("\n证书:").append(cert); + log.warn("证书导入失败!\n{}", stringBuilder); //异步发送snmp trap消息 String result = "[" + failures.stream() .map(Object::toString) @@ -1342,12 +1361,20 @@ public class SydApi4j implements SydApi { Gson gson = new Gson(); Map map = gson.fromJson(snmpConfig, new TypeToken>() {}.getType()); try (SnmpTrapSender sender = new SnmpTrapSender(map)) { - sender.sendTrap(message, 2); - System.out.println("snmp告警消息发送成功:" + message); - } catch (IOException e) { - System.out.println("snmp告警消息发送失败:" + e.getMessage()); + ResponseEvent event = sender.sendTrap(message, 2); + log.info("snmp告警消息发送成功:{}", message); +// if (event != null && event.getResponse() != null) { +// PDU response = event.getResponse(); +// if (response.getErrorStatus() == PDU.noError) { +// log.info("snmp告警消息发送成功:{}/响应数据:{}", message, response.getVariableBindings()); +// } else { +// log.info("snmp告警消息发送失败:{}", SnmpConstants.mpErrorMessage(response.getErrorStatus())); +// } +// } + } catch (Exception e) { + log.warn("snmp告警消息发送失败:{}", e.getMessage()); } - throw new SydApiException(String.valueOf(stringBuilder), 56300, true); + throw new SydApiException("证书导入失败!", 56300, true); } } diff --git a/src/test/java/sample/Test4NongxinCW.java b/src/test/java/sample/Test4NongxinCW.java index c87b0de..aa326c6 100644 --- a/src/test/java/sample/Test4NongxinCW.java +++ b/src/test/java/sample/Test4NongxinCW.java @@ -98,22 +98,22 @@ public class Test4NongxinCW { "-----END CERTIFICATE-----"; String cert = "-----BEGIN CERTIFICATE-----\n" + - "MIICITCCAcWgAwIBAgIGAZbD4M8uMAwGCCqBHM9VAYN1BQAwSzELMAkGA1UEBhMC\n" + - "Q04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRowGAYDVQQDExFN\n" + - "aWRkbGVDQSBmb3IgVGVzdDAiGA8yMDI1MDUxMTE2MDAwMFoYDzIwMjYwNTExMTYw\n" + - "MDAwWjBQMQswCQYDVQQGDAJDTjERMA8GA1UECAwIaGFuZ3pob3UxETAPBgNVBAcM\n" + - "CGhhbmd6aG91MQwwCgYDVQQKDANzc3MxDTALBgNVBAMMBHNzc3MwWTATBgcqhkjO\n" + - "PQIBBggqgRzPVQGCLQNCAARGnQQLJSiMkoH2iCqbsTpGkZmHPCP7ThQQmzf1m8jr\n" + - "NjgMzBJ0p2rXJQSglaVqaVcaL/ox5wfV8okIavToNQjao4GJMIGGMBsGA1UdIwQU\n" + - "MBKAEPl/VbQnlDNiplbKb8xdGv8wGQYDVR0OBBIEEMu/aP+Gw3PMakxFSVzC5MYw\n" + - "MQYIKwYBBQUHAQEEJTAjMCEGCCsGAQUFBzABhhVodHRwczovL29jc3AuZ21zc2wu\n" + - "Y24wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCAMAwDAYIKoEcz1UBg3UFAANIADBF\n" + - "AiEAnoN1iWj1Cv6M4eUtSt2XEoKpswLTEy7gczIn/ZTI+JYCIB2but+jsuUD6Udp\n" + - "uFp7xVvOp8IKQyazXx9bA4N9PbLo\n" + - "-----END CERTIFICATE-----"; + "MIICMDCCAdagAwIBAgIJAOWoGwJCnjlLMAoGCCqBHM9VAYN1MGcxCzAJBgNVBAYT\n" + + "AkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdIYWlEaWFuMRMwEQYDVQQK\n" + + "DApHTUNlcnQub3JnMR8wHQYDVQQDDBZHTUNlcnQgR00gUm9vdCBDQSAtIDAxMB4X\n" + + "DTI1MDUxMzAyMzUxM1oXDTI2MDUxMzAyMzUxM1owRTELMAkGA1UEBgwCQ04xCzAJ\n" + + "BgNVBAgMAnp6MQswCQYDVQQHDAJ6ejEMMAoGA1UECgwDenp6MQ4wDAYDVQQDDAV6\n" + + "enp6ejBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABK5fyRSACWPIBBr/3U+qvjvp\n" + + "niropv2PrA3ZLU1bG8vQpwAEMA0kwyqGgXURBPbvWdAhN7s9wfvHbJyMd9CMZGqj\n" + + "gYwwgYkwDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwLAYJYIZIAYb4QgENBB8W\n" + + "HUdNQ2VydC5vcmcgU2lnbmVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSQB7UUqEuG\n" + + "kl4mrx3MAhKTptfbYjAfBgNVHSMEGDAWgBR/Wl47AIRZKg+YvqEObzmVQxBNBzAK\n" + + "BggqgRzPVQGDdQNIADBFAiEA4kgTdn/iA/XYfjTEeOcELwBXd0tTFghkpfP8DhBF\n" + + "KFQCIAXZTL6VPtW67tM/DF4ZgFt5S/YIiFombKa2bWOfL81u\n" + + "-----END CERTIFICATE-----";; //将证书导入设备,获取证书主题 - String dn = api.importCertAndGetDN(certBySign); + String dn = api.importCertAndGetDN(cert); System.out.println("导入证书主题为:"+dn); @@ -224,19 +224,20 @@ public class Test4NongxinCW { "-----END CERTIFICATE-----"; List masterNodes = new ArrayList<>(); // masterNodes.add("172.16.18.99:8889"); - masterNodes.add("172.16.18.5:8889"); +// masterNodes.add("172.16.18.5:8889"); masterNodes.add("172.16.18.6:8889"); // masterNodes.add("172.16.18.7:8889"); // masterNodes.add("172.16.18.8:8889"); - int timeout = 1000; + int timeout = 1; Map map = new HashMap<>(); map.put("snmp.target.ip", "172.16.18.113"); map.put("snmp.target.port", "162"); map.put("enterprise.oid", "1.3.6.1.4.1.9999"); map.put("snmp.community", "public"); map.put("snmp.version", "1"); + String snmpConfig = new Gson().toJson(map); SydApi4j sydApi4j = new SydApi4j(); - sydApi4j.importCertToServers(new ArrayList<>(), timeout, cert1, "12345678", new Gson().toJson(map)); + sydApi4j.importCertToServers(masterNodes, timeout, cert, "12345678", snmpConfig); stopWatch.stop(); System.out.println(stopWatch.getTotalTimeSeconds()); }