From 04674b2d7cae8063e30bce9424cc791e07e5df3e Mon Sep 17 00:00:00 2001
From: even <827656971@qq.com>
Date: Fri, 23 May 2025 09:27:32 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
modules/module-ci-process-biz/pom.xml | 12 +-
.../manager/impl/DefaultWorkerManager.java | 1 +
.../worker/DIYImageExecuteCommandWorker.java | 4 +-
.../ci/process/engine/worker/SshWorker.java | 4 +-
.../cd/casic/ci/process/ssh/SshClient.java | 2 +-
.../cd/casic/ci/process/ssh/SshCommand.java | 20 +-
.../casic/ci/process/util/CryptogramUtil.java | 246 ++++++++++--------
.../java/cd/casic/server/MachineTest.java | 18 ++
8 files changed, 190 insertions(+), 117 deletions(-)
diff --git a/modules/module-ci-process-biz/pom.xml b/modules/module-ci-process-biz/pom.xml
index 20cdb7f5..85cfe032 100644
--- a/modules/module-ci-process-biz/pom.xml
+++ b/modules/module-ci-process-biz/pom.xml
@@ -38,10 +38,16 @@
com.jcraft
jsch
+
+
+
+
+
+
- com.antherd
- sm-crypto
- 0.3.2
+ org.bouncycastle
+ bcprov-jdk18on
+ 1.80
com.hierynomus
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/DefaultWorkerManager.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/DefaultWorkerManager.java
index dab5abdc..987147b9 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/DefaultWorkerManager.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/DefaultWorkerManager.java
@@ -71,6 +71,7 @@ public class DefaultWorkerManager extends WorkerManager {
}
}
}
+
log.info("================WorkerManager初始化完毕");
}
@Override
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java
index 43ddae22..7dca6737 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java
@@ -26,7 +26,7 @@ import java.util.concurrent.atomic.AtomicInteger;
*/
@Slf4j
//@Plugin(taskType = "CUSTOM_IMAGE_EXECUTION_COMMAND")
-//@Plugin(taskType = "test")
+@Plugin(taskType = "testSSH")
public class DIYImageExecuteCommandWorker extends SshWorker {
@Override
@@ -60,7 +60,7 @@ public class DIYImageExecuteCommandWorker extends SshWorker {
//获取机器
MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId);
- statusCode = shell(machineInfoDO,taskLog,
+ statusCode = shell(machineInfoDO,"1qaz!QAZ",taskLog,
"echo \"自定义镜像执行命令\"",
commandScript
);
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/SshWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/SshWorker.java
index cf79df7a..ad2637f4 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/SshWorker.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/SshWorker.java
@@ -22,7 +22,7 @@ public abstract class SshWorker extends BaseWorker{
* @param commands 命令
* @return 0 成功;其他值 失败
*/
- public int shell(MachineInfo machineInfo, PipTaskLog taskLog, String... commands) {
+ public int shell(MachineInfo machineInfo,String sudoPassword, PipTaskLog taskLog, String... commands) {
List commandList = Arrays.asList(commands);
if(MachineSystemEnum.WINDOWS.getSystem().equals(machineInfo.getOsSystem())){
return powerShell(machineInfo, commandList);
@@ -38,7 +38,7 @@ public abstract class SshWorker extends BaseWorker{
//执行命令,并且把命令的执行回传到前端
// TODO 记录日志
// loggerService.sendMessage(key, var);
- statusCode = ssh.execNew(commandList, taskLog::append);
+ statusCode = ssh.execNew(commandList,sudoPassword, taskLog::append);
log.info("exit-status: " + statusCode);
//主动释放当前socket连接
// loggerService.close(key);
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshClient.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshClient.java
index 49f18fb0..a5ff0487 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshClient.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshClient.java
@@ -28,7 +28,7 @@ public interface SshClient {
* @return 执行成功返回0,失败返回1
* @throws IOException
*/
- int execNew(List commands, ExecCallback execCallback) throws IOException;
+ int execNew(List commands,String sudoPassword, ExecCallback execCallback) throws IOException;
/**
* 执行ssh 命令
*
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java
index 25cd34c7..537afd55 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java
@@ -158,16 +158,15 @@ public class SshCommand implements SshClient {
}
@Override
- public int execNew(List commands, ExecCallback execCallback) throws IOException {
-
+ public int execNew(List commands, String sudoPassword, ExecCallback execCallback) throws IOException {
ChannelShell channel = null;
try {
channel = (ChannelShell) session.openChannel("shell");
channel.connect();
} catch (JSchException e) {
e.printStackTrace();
+ throw new IOException("打开shell通道失败", e);
}
-
assert channel != null;
ChannelShellUtil.setDefault(channel);
InputStream inputStream = channel.getInputStream();
@@ -176,10 +175,19 @@ public class SshCommand implements SshClient {
BufferedReader br = new BufferedReader(isr, BUFF_SIZE);
PrintStream commander = new PrintStream(outputStream, true);
- for (String command : commands) {
- commander.append(command).append(CommandConstant.ENTER);
+ // 逐条命令处理
+ for (String cmd : commands) {
+ String realCmd;
+ if (sudoPassword != null && !sudoPassword.isEmpty()) {
+ // 单引号转义,防止脚本内容出错
+ String safeCmd = cmd.replace("'", "'\\''");
+ realCmd = "echo " + sudoPassword + " | sudo -S bash -c '" + safeCmd + "'";
+ } else {
+ realCmd = cmd;
+ }
+ commander.append(realCmd).append(CommandConstant.ENTER);
}
- commander.append("exit" + CommandConstant.ENTER);
+ commander.append("exit").append(CommandConstant.ENTER);
try {
char[] buff = new char[BUFF_SIZE];
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/util/CryptogramUtil.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/util/CryptogramUtil.java
index 20cc788a..9784584e 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/util/CryptogramUtil.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/util/CryptogramUtil.java
@@ -1,135 +1,175 @@
package cd.casic.ci.process.util;
-import cn.hutool.log.Log;
-import com.antherd.smcrypto.sm2.Sm2;
-import com.antherd.smcrypto.sm3.Sm3;
-import com.antherd.smcrypto.sm4.Sm4;
-import com.antherd.smcrypto.sm4.Sm4Options;
+// ... 省略 package 和 import ...
+import org.bouncycastle.crypto.CipherParameters;
+import org.bouncycastle.crypto.digests.SM3Digest;
+import org.bouncycastle.crypto.engines.SM2Engine;
+import org.bouncycastle.crypto.engines.SM4Engine;
+import org.bouncycastle.crypto.generators.SM2KeyPairGenerator;
+import org.bouncycastle.crypto.macs.HMac;
+import org.bouncycastle.crypto.modes.CBCBlockCipher;
+import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
+import org.bouncycastle.crypto.params.*;
+import org.bouncycastle.crypto.signers.SM2Signer;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.util.encoders.Hex;
+
+import java.nio.charset.StandardCharsets;
+import java.security.*;
+import java.security.spec.ECGenParameterSpec;
-/**
- * 加密工具类,本框架目前使用 https://github.com/antherd/sm-crypto 项目中一些加解密方式
- * 使用小伙伴需要过等保密评相关,请在此处更改为自己的加密方法,或加密机,使用加密机同时需要替换公钥,私钥在内部无法导出,提供加密的方法
- *
- * @author yubaoshan
- */
public class CryptogramUtil {
- private static final Log log = Log.get();
+ static {
+ Security.addProvider(new BouncyCastleProvider());
+ }
/**
- * 加密方法(Sm2 的专门针对前后端分离,非对称秘钥对的方式,暴露出去的公钥,对传输过程中的密码加个密)
- *
- * @param str 待加密数据
- * @return 加密后的密文
- * @author yubaoshan
+ * SM2 公钥加密
*/
public static String doSm2Encrypt(String str) {
- return Sm2.doEncrypt(str, Keypair.PUBLIC_KEY);
- }
-
- /**
- * 解密方法
- * 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
- *
- * @param str 密文
- * @return 解密后的明文
- * @author yubaoshan
- */
- public static String doSm2Decrypt(String str) {
- // 解密
- return Sm2.doDecrypt(str, Keypair.PRIVATE_KEY);
- }
-
- /**
- * 加密方法
- *
- * @param str 待加密数据
- * @return 加密后的密文
- * @author yubaoshan
- */
- public static String doEncrypt(String str) {
- // SM4 加密 cbc模式
- Sm4Options sm4Options4 = new Sm4Options();
- sm4Options4.setMode("cbc");
- sm4Options4.setIv("fedcba98765432100123456789abcdef");
- return Sm4.encrypt(str, Keypair.KEY, sm4Options4);
- }
-
- /**
- * 解密方法
- * 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可
- *
- * @param str 密文
- * @return 解密后的明文
- * @author yubaoshan
- */
- public static String doDecrypt(String str) {
- // 解密,cbc 模式,输出 utf8 字符串
- Sm4Options sm4Options8 = new Sm4Options();
- sm4Options8.setMode("cbc");
- sm4Options8.setIv("fedcba98765432100123456789abcdef");
- String docString = Sm4.decrypt(str, Keypair.KEY, sm4Options8);
- if (docString.equals("")) {
- log.warn(">>> 字段解密失败,返回原文值:{}", str);
- return str;
- } else {
- return docString;
+ try {
+ byte[] data = str.getBytes(StandardCharsets.UTF_8);
+ ECPublicKeyParameters pubKey = getSm2PublicKey(Keypair.PUBLIC_KEY);
+ SM2Engine engine = new SM2Engine();
+ engine.init(true, pubKey);
+ byte[] enc = engine.processBlock(data, 0, data.length);
+ return Hex.toHexString(enc);
+ } catch (Exception e) {
+ throw new RuntimeException("SM2加密失败", e);
}
}
/**
- * 纯签名
- *
- * @param str 待签名数据
- * @return 签名结果
- * @author yubaoshan
+ * SM2 私钥解密
+ */
+ public static String doSm2Decrypt(String str) {
+ try {
+ byte[] enc = Hex.decode(str);
+ ECPrivateKeyParameters priKey = getSm2PrivateKey(Keypair.PRIVATE_KEY);
+ SM2Engine engine = new SM2Engine();
+ engine.init(false, priKey);
+ byte[] dec = engine.processBlock(enc, 0, enc.length);
+ return new String(dec, StandardCharsets.UTF_8);
+ } catch (Exception e) {
+ // 解密失败返回原文
+ return str;
+ }
+ }
+
+ /**
+ * SM4 CBC 加密
+ */
+ public static String doEncrypt(String str) {
+ try {
+ byte[] key = Hex.decode(Keypair.KEY);
+ byte[] iv = Hex.decode(Keypair.IV);
+ PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new SM4Engine()));
+ cipher.init(true, new ParametersWithIV(new KeyParameter(key), iv));
+ byte[] input = str.getBytes(StandardCharsets.UTF_8);
+ byte[] output = new byte[cipher.getOutputSize(input.length)];
+ int len = cipher.processBytes(input, 0, input.length, output, 0);
+ len += cipher.doFinal(output, len);
+ return Hex.toHexString(output, 0, len);
+ } catch (Exception e) {
+ throw new RuntimeException("SM4加密失败", e);
+ }
+ }
+
+ /**
+ * SM4 CBC 解密
+ */
+ public static String doDecrypt(String str) {
+ try {
+ byte[] key = Hex.decode(Keypair.KEY);
+ byte[] iv = Hex.decode(Keypair.IV);
+ PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new SM4Engine()));
+ cipher.init(false, new ParametersWithIV(new KeyParameter(key), iv));
+ byte[] input = Hex.decode(str);
+ byte[] output = new byte[cipher.getOutputSize(input.length)];
+ int len = cipher.processBytes(input, 0, input.length, output, 0);
+ len += cipher.doFinal(output, len);
+ return new String(output, 0, len, StandardCharsets.UTF_8);
+ } catch (Exception e) {
+ // 解密失败返回原文
+ return str;
+ }
+ }
+
+ /**
+ * SM2 签名
*/
public static String doSignature(String str) {
- return Sm2.doSignature(str, Keypair.PRIVATE_KEY);
+ try {
+ ECPrivateKeyParameters priKey = getSm2PrivateKey(Keypair.PRIVATE_KEY);
+ SM2Signer signer = new SM2Signer();
+ signer.init(true, priKey);
+ byte[] msg = str.getBytes(StandardCharsets.UTF_8);
+ signer.update(msg, 0, msg.length);
+ byte[] sig = signer.generateSignature();
+ return Hex.toHexString(sig);
+ } catch (Exception e) {
+ throw new RuntimeException("SM2签名失败", e);
+ }
}
/**
- * 验证签名结果
- *
- * @param originalStr 签名原文数据
- * @param str 签名结果
- * @return 是否通过
- * @author yubaoshan
+ * SM2 验签
*/
public static boolean doVerifySignature(String originalStr, String str) {
- return Sm2.doVerifySignature(originalStr, str, Keypair.PUBLIC_KEY);
+ try {
+ ECPublicKeyParameters pubKey = getSm2PublicKey(Keypair.PUBLIC_KEY);
+ SM2Signer signer = new SM2Signer();
+ signer.init(false, pubKey);
+ byte[] msg = originalStr.getBytes(StandardCharsets.UTF_8);
+ signer.update(msg, 0, msg.length);
+ byte[] sig = Hex.decode(str);
+ return signer.verifySignature(sig);
+ } catch (Exception e) {
+ return false;
+ }
}
/**
- * 通过杂凑算法取得hash值,用于做数据完整性保护
- *
- * @param str 字符串
- * @return hash 值
- * @author yubaoshan
+ * SM3 哈希
*/
public static String doHashValue(String str) {
- return Sm3.sm3(str);
+ try {
+ SM3Digest digest = new SM3Digest();
+ byte[] msg = str.getBytes(StandardCharsets.UTF_8);
+ digest.update(msg, 0, msg.length);
+ byte[] hash = new byte[digest.getDigestSize()];
+ digest.doFinal(hash, 0);
+ return Hex.toHexString(hash);
+ } catch (Exception e) {
+ throw new RuntimeException("SM3哈希失败", e);
+ }
}
- private static class Keypair{
-
- /**
- * 公钥
- */
- public static String PUBLIC_KEY = "04298364ec840088475eae92a591e01284d1abefcda348b47eb324bb521bb03b0b2a5bc393f6b71dabb8f15c99a0050818b56b23f31743b93df9cf8948f15ddb54";
-
- /**
- * 私钥
- */
- public static String PRIVATE_KEY = "3037723d47292171677ec8bd7dc9af696c7472bc5f251b2cec07e65fdef22e25";
-
- /**
- * SM4的对称秘钥(生产环境需要改成自己使用的)
- * 16 进制字符串,要求为 128 比特
- */
- public static String KEY = "0123456789abcdeffedcba9876543210";
+ // ====== 工具方法 ======
+ // 获取SM2公钥参数
+ private static ECPublicKeyParameters getSm2PublicKey(String hex) {
+ org.bouncycastle.jce.spec.ECParameterSpec ecSpec = org.bouncycastle.jce.ECNamedCurveTable.getParameterSpec("sm2p256v1");
+ org.bouncycastle.math.ec.ECPoint q = ecSpec.getCurve().decodePoint(Hex.decode(hex));
+ return new ECPublicKeyParameters(q, new ECDomainParameters(ecSpec.getCurve(), ecSpec.getG(), ecSpec.getN()));
}
+ // 获取SM2私钥参数
+ private static ECPrivateKeyParameters getSm2PrivateKey(String hex) {
+ org.bouncycastle.jce.spec.ECParameterSpec ecSpec = org.bouncycastle.jce.ECNamedCurveTable.getParameterSpec("sm2p256v1");
+ return new ECPrivateKeyParameters(new java.math.BigInteger(hex, 16), new ECDomainParameters(ecSpec.getCurve(), ecSpec.getG(), ecSpec.getN()));
+ }
+
+ private static class Keypair {
+ // 公钥(未压缩点,hex字符串,前缀04)
+ public static final String PUBLIC_KEY = "04298364ec840088475eae92a591e01284d1abefcda348b47eb324bb521bb03b0b2a5bc393f6b71dabb8f15c99a0050818b56b23f31743b93df9cf8948f15ddb54";
+ // 私钥(hex字符串)
+ public static final String PRIVATE_KEY = "3037723d47292171677ec8bd7dc9af696c7472bc5f251b2cec07e65fdef22e25";
+ // SM4密钥(16字节,128位,hex字符串)
+ public static final String KEY = "0123456789abcdeffedcba9876543210";
+ // SM4 IV(16字节,hex字符串)
+ public static final String IV = "fedcba98765432100123456789abcdef";
+ }
}
diff --git a/ops-server/src/test/java/cd/casic/server/MachineTest.java b/ops-server/src/test/java/cd/casic/server/MachineTest.java
index 8d279750..a86c704e 100644
--- a/ops-server/src/test/java/cd/casic/server/MachineTest.java
+++ b/ops-server/src/test/java/cd/casic/server/MachineTest.java
@@ -28,5 +28,23 @@ public class MachineTest {
String encrypt = CryptogramUtil.doEncrypt(password);
System.out.println(encrypt);
}
+ @Test
+ public void test02(){
+ String s = "\n" +
+ "cd /home/casic/706/yunqi/CaseGenerator\n" +
+ "PYTHONPATH=$PWD/src python3 ./src/CaseGenerator/main.py --work-dir ./testdata/libpng/libpng/ --binary ./testdata/libpng/libpng/pngfix --output-dir ../case --count 100\n" +
+ "\n" +
+ "\n" +
+ "cd /home/casic/706\n" +
+ "\n" +
+ "docker run -v $PWD/yunqi/:/test -it aflplusplus/aflplusplus bash\n" +
+ "\n" +
+ "cd /test\n" +
+ "afl-fuzz -i case -o ai_afl -t 3000 -Q ./CaseGenerator/testdata/libpng/libpng/pngfix @@";
+ }
+ @Test
+ public void test03(){
+ System.out.println("\r\nWelcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-150-generic x86_64)\r\n\r\n * Documentation: https://help.ubuntu.com\r\n * Management: https://landscape.canonical.com\r\n * Support: https://ubuntu.com/pro\r\n\r\n扩展安全维护(ESM)Infrastructure 未启用。\r\n\r\n0 更新可以立即应用。\r\n\r\n240 个额外的安全更新可以通过 ESM Infra 来获取安装。\r\n可通过以下途径了解如何启用 ESM Infra:for Ubuntu 18.04 at\r\nhttps://ubuntu.com/18-04\r\n\r\n*** System restart required ***\r\nLast login: Thu May 22 19:48:13 2025 from 39.144.190.87\r\r\n\r\n\r\nhnidc@hnidc-PowerEdge-R740:~$ \r\n\r\necho \"自定义镜像执行命令\"\r\n\r\n\r\n自定义镜像执行命令\r\nhnidc@hnidc-PowerEdge-R740:~$ \r\nhnidc@hnidc-PowerEdge-R740:~$ cd /home/casic/706/yunqi/CaseGenerator\r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706/yunqi/CaseGenerator$ PYTHONPATH=$PWD/s\rsrc python3 ./src/CaseGenerator/main.py --work-dir ./testdata/libpng/libpng/ --bi\rinary ./testdata/libpng/libpng/pngfix --output-dir ../case --count 100\r\n\r\n\r\n/home/casic/706/yunqi/CaseGenerator/src\r\n\r\n\r\nNo log file path specified, use default path: /log.log\r\nTraceback (most recent call last):\r\n File \"/home/casic/706/yunqi/CaseGenerator/./src/CaseGenerator/main.py\", line 9, in \r\n\r\n\r\n from CaseGenerator.agent.case_gen import CaseGenerator\r\n File \"/home/casic/706/yunqi/CaseGenerator/src/CaseGenerator/agent/case_gen.py\", line 13, in \r\n from CaseGenerator.agent.tools.file import read_file_lines, grep_in_file\r\n File \"/home/casic/706/yunqi/CaseGenerator/src/CaseGenerator/agent/tools/file.py\", line 5, in \r\n from CaseGenerator.utils.text import read_text_range\r\n File \"/home/casic/706/yunqi/CaseGenerator/src/CaseGenerator/utils/text.py\", line 8, in \r\n logger_text_parser = get_logger(__name__)\r\n ^^^^^^^^^^^^^^^^^^^^\r\n File \"/home/casic/706/yunqi/CaseGenerator/src/CaseGenerator/utils/log.py\", line 60, in get_logger\r\n return __log_manager.get_logger(name=name)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/home/casic/706/yunqi/CaseGenerator/src/CaseGenerator/utils/log_manager.py\", line 133, in get_logger\r\n file_handler = self._get_file_handler(file_level)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/home/casic/706/yunqi/CaseGenerator/src/CaseGenerator/utils/log_manager.py\", line 87, in _get_file_handler\r\n file_handler = logging.handlers.RotatingFileHandler(self.log_file_path, maxBytes = 10*1024*1024, backupCount = 5, encoding = \"utf-8\")\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/logging/handlers.py\", line 155, in __init__\r\n BaseRotatingHandler.__init__(self, filename, mode, encoding=encoding,\r\n File \"/usr/local/lib/python3.12/logging/handlers.py\", line 58, in __init__\r\n logging.FileHandler.__init__(self, filename, mode=mode,\r\n File \"/usr/local/lib/python3.12/logging/__init__.py\", line 1231, in __init__\r\n StreamHandler.__init__(self, self._open())\r\n ^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/logging/__init__.py\", line 1263, in _open\r\n return open_func(self.baseFilename, self.mode,\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\nPermissionError: [Errno 13] Permission denied: '/log.log'\r\n\r\n\r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706/yunqi/CaseGenerator$ \r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706/yunqi/CaseGenerator$ \r\n\r\ncd /home/casic/70\r06\r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706$ docker run -v $PWD/yunqi/:/test -it \r aflplusplus/aflplusplus bash\r\n\r\n\r\ndocker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post \"http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create\": dial unix /var/run/docker.sock: connect: permission denied.\r\nSee 'docker run --help'.\r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706$ \r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706$ \r\n\r\ncd /test\r\n-bash: cd: /test: 没有那个文件或目录\r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706$ afl-fuzz -i case -o ai_afl -t 3000 -Q\rQ ./CaseGenerator/testdata/libpng/libpng/pngfix @@\r\n\u001b[0;36mafl-fuzz \u001b[1;97m2.52b\u001b[0m by \r\n\u001b[1;92m[+] \u001b[0mYou have 80 CPU cores and 1 runnable tasks (utilization: 1%).\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mTry parallel jobs - see /usr/share/doc/afl-doc/docs/parallel_fuzzing.txt.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mChecking CPU core loadout...\u001b[0m\r\n\r\n\r\n\u001b[1;92m[+] \u001b[0mFound a free CPU core, binding to #0.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mChecking core_pattern...\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mChecking CPU scaling governor...\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mSetting up output directories...\u001b[0m\r\n\u000f\u001b)B\u001b[?25h\u001b[0m\u001b[1;91m\r\n[-] SYSTEM ERROR : \u001b[1;97mUnable to create 'ai_afl'\u001b[1;91m\r\n Stop location : \u001b[0msetup_dirs_fds(), afl-fuzz.c:7094\r\n\u001b[1;91m OS message : \u001b[0mPermission denied\r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706$ \r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706$ exit\r\n注销\r\n\r\n");
+ }
}