From 7796298fca45a04c831c0f2929f30576d715afb8 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Wed, 1 Oct 2025 02:11:03 +0800 Subject: [PATCH 1/2] 1 --- packages/core/basic/src/utils/util.sp.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/core/basic/src/utils/util.sp.ts b/packages/core/basic/src/utils/util.sp.ts index af7cae4ec..72b4efa86 100644 --- a/packages/core/basic/src/utils/util.sp.ts +++ b/packages/core/basic/src/utils/util.sp.ts @@ -112,13 +112,23 @@ async function spawn(opts: SpawnOption): Promise { }); ls.on("error", error => { log.error(`child process error: ${error}`); + const e = error; + // @ts-ignore + e.stderr = stderr; + // @ts-ignore + e.stdout = stdout; reject(error); }); ls.on("close", (code: number) => { if (code !== 0) { log.error(`child process exited with code ${code}`); - reject(new Error(stderr)); + const e = new Error(stderr || `return ${code}`); + // @ts-ignore + e.stderr = stderr; + // @ts-ignore + e.stdout = stdout; + reject(e); } else { resolve(stdout); } From dffa152698453a901e2ec64e9dca7d0ff69563e0 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 5 Oct 2025 13:10:03 +0800 Subject: [PATCH 2/2] chore: nettest --- .../modules/sys/nettest/nettest-service.ts | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/packages/ui/certd-server/src/modules/sys/nettest/nettest-service.ts b/packages/ui/certd-server/src/modules/sys/nettest/nettest-service.ts index feb7ed70b..7f383ba9e 100644 --- a/packages/ui/certd-server/src/modules/sys/nettest/nettest-service.ts +++ b/packages/ui/certd-server/src/modules/sys/nettest/nettest-service.ts @@ -1,5 +1,5 @@ import { Provide, Scope, ScopeEnum } from '@midwayjs/core'; -import { http, utils } from '@certd/basic'; +import { http, logger, utils } from '@certd/basic'; // 使用@certd/basic包中已有的utils.sp.spawn函数替代自定义的asyncExec // 该函数已经内置了Windows系统编码问题的解决方案 @@ -156,7 +156,7 @@ export class NetTestService { async getLocalIP(): Promise { try { const output = await utils.sp.spawn({ - cmd: 'bash -c "ip a | grep \'inet \' | grep -v \'127.0.0.1\' | awk \'{print $2}\' | cut -d/ -f1"', + cmd: 'ip a | grep \'inet \' | grep -v \'127.0.0.1\' | awk \'{print $2}\' | cut -d/ -f1', logger: undefined }); return output.trim(); @@ -178,15 +178,35 @@ export class NetTestService { } async getDNSservers(): Promise { + let dnsServers: string[] = []; try { const output = await utils.sp.spawn({ cmd: 'cat /etc/resolv.conf | grep nameserver | awk \'{print $2}\'', logger: undefined }); - return output.trim().split('\n'); + dnsServers = output.trim().split('\n'); } catch (error) { - return [error instanceof Error ? error.message : String(error)]; + dnsServers = [error instanceof Error ? error.message : String(error)]; } + try{ + /** + * /app # cat /etc/resolv.conf | grep "ExtServers" +# ExtServers: [223.5.5.5 223.6.6.6] + */ + const extDnsServers = await utils.sp.spawn({ + cmd: 'cat /etc/resolv.conf | grep "ExtServers"', + logger: undefined + }); + const line = extDnsServers.trim() + if (line.includes('ExtServers') && line.includes('[')) { + const extDns = extDnsServers.trim().split(' ')[1].replace('[', '').replace(']', '').split(' '); + dnsServers = dnsServers.concat(extDns); + } + } catch (error) { + logger.error('获取DNS服务器失败', error); + dnsServers.push(error instanceof Error ? error.message : String(error)); + } + return dnsServers; } /** * 获取服务器信息(包括本地IP、外网IP和DNS服务器)