@panguard-ai/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/adapter-registry.d.ts +150 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +271 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/base-adapter.d.ts +101 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +160 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/defender-adapter.d.ts +90 -0
- package/dist/adapters/defender-adapter.d.ts.map +1 -0
- package/dist/adapters/defender-adapter.js +227 -0
- package/dist/adapters/defender-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +22 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +23 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/syslog-adapter.d.ts +207 -0
- package/dist/adapters/syslog-adapter.d.ts.map +1 -0
- package/dist/adapters/syslog-adapter.js +432 -0
- package/dist/adapters/syslog-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +135 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +13 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/wazuh-adapter.d.ts +120 -0
- package/dist/adapters/wazuh-adapter.d.ts.map +1 -0
- package/dist/adapters/wazuh-adapter.js +266 -0
- package/dist/adapters/wazuh-adapter.js.map +1 -0
- package/dist/ai/claude-provider.d.ts +66 -0
- package/dist/ai/claude-provider.d.ts.map +1 -0
- package/dist/ai/claude-provider.js +166 -0
- package/dist/ai/claude-provider.js.map +1 -0
- package/dist/ai/funnel-router.d.ts +75 -0
- package/dist/ai/funnel-router.d.ts.map +1 -0
- package/dist/ai/funnel-router.js +173 -0
- package/dist/ai/funnel-router.js.map +1 -0
- package/dist/ai/index.d.ts +77 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +95 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/ollama-provider.d.ts +73 -0
- package/dist/ai/ollama-provider.d.ts.map +1 -0
- package/dist/ai/ollama-provider.js +200 -0
- package/dist/ai/ollama-provider.js.map +1 -0
- package/dist/ai/openai-provider.d.ts +70 -0
- package/dist/ai/openai-provider.d.ts.map +1 -0
- package/dist/ai/openai-provider.js +175 -0
- package/dist/ai/openai-provider.js.map +1 -0
- package/dist/ai/prompts/event-classifier.d.ts +25 -0
- package/dist/ai/prompts/event-classifier.d.ts.map +1 -0
- package/dist/ai/prompts/event-classifier.js +94 -0
- package/dist/ai/prompts/event-classifier.js.map +1 -0
- package/dist/ai/prompts/index.d.ts +13 -0
- package/dist/ai/prompts/index.d.ts.map +1 -0
- package/dist/ai/prompts/index.js +13 -0
- package/dist/ai/prompts/index.js.map +1 -0
- package/dist/ai/prompts/report-generator.d.ts +25 -0
- package/dist/ai/prompts/report-generator.d.ts.map +1 -0
- package/dist/ai/prompts/report-generator.js +131 -0
- package/dist/ai/prompts/report-generator.js.map +1 -0
- package/dist/ai/prompts/threat-analyzer.d.ts +26 -0
- package/dist/ai/prompts/threat-analyzer.d.ts.map +1 -0
- package/dist/ai/prompts/threat-analyzer.js +75 -0
- package/dist/ai/prompts/threat-analyzer.js.map +1 -0
- package/dist/ai/provider-base.d.ts +100 -0
- package/dist/ai/provider-base.d.ts.map +1 -0
- package/dist/ai/provider-base.js +166 -0
- package/dist/ai/provider-base.js.map +1 -0
- package/dist/ai/response-parser.d.ts +36 -0
- package/dist/ai/response-parser.d.ts.map +1 -0
- package/dist/ai/response-parser.js +195 -0
- package/dist/ai/response-parser.js.map +1 -0
- package/dist/ai/token-tracker.d.ts +72 -0
- package/dist/ai/token-tracker.d.ts.map +1 -0
- package/dist/ai/token-tracker.js +145 -0
- package/dist/ai/token-tracker.js.map +1 -0
- package/dist/ai/types.d.ts +138 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +12 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/cli/index.d.ts +146 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +515 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompts.d.ts +58 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +327 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/wizard.d.ts +58 -0
- package/dist/cli/wizard.d.ts.map +1 -0
- package/dist/cli/wizard.js +200 -0
- package/dist/cli/wizard.js.map +1 -0
- package/dist/discovery/firewall-checker.d.ts +28 -0
- package/dist/discovery/firewall-checker.d.ts.map +1 -0
- package/dist/discovery/firewall-checker.js +379 -0
- package/dist/discovery/firewall-checker.js.map +1 -0
- package/dist/discovery/index.d.ts +23 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +29 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/network-scanner.d.ts +60 -0
- package/dist/discovery/network-scanner.d.ts.map +1 -0
- package/dist/discovery/network-scanner.js +640 -0
- package/dist/discovery/network-scanner.js.map +1 -0
- package/dist/discovery/os-detector.d.ts +24 -0
- package/dist/discovery/os-detector.d.ts.map +1 -0
- package/dist/discovery/os-detector.js +253 -0
- package/dist/discovery/os-detector.js.map +1 -0
- package/dist/discovery/osquery-provider.d.ts +127 -0
- package/dist/discovery/osquery-provider.d.ts.map +1 -0
- package/dist/discovery/osquery-provider.js +214 -0
- package/dist/discovery/osquery-provider.js.map +1 -0
- package/dist/discovery/risk-scorer.d.ts +66 -0
- package/dist/discovery/risk-scorer.d.ts.map +1 -0
- package/dist/discovery/risk-scorer.js +294 -0
- package/dist/discovery/risk-scorer.js.map +1 -0
- package/dist/discovery/security-tools.d.ts +31 -0
- package/dist/discovery/security-tools.d.ts.map +1 -0
- package/dist/discovery/security-tools.js +346 -0
- package/dist/discovery/security-tools.js.map +1 -0
- package/dist/discovery/service-detector.d.ts +28 -0
- package/dist/discovery/service-detector.d.ts.map +1 -0
- package/dist/discovery/service-detector.js +300 -0
- package/dist/discovery/service-detector.js.map +1 -0
- package/dist/discovery/types.d.ts +502 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +12 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/discovery/user-auditor.d.ts +28 -0
- package/dist/discovery/user-auditor.d.ts.map +1 -0
- package/dist/discovery/user-auditor.js +385 -0
- package/dist/discovery/user-auditor.js.map +1 -0
- package/dist/i18n/config.d.ts +45 -0
- package/dist/i18n/config.d.ts.map +1 -0
- package/dist/i18n/config.js +135 -0
- package/dist/i18n/config.js.map +1 -0
- package/dist/i18n/index.d.ts +8 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +8 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/monitor/event-normalizer.d.ts +102 -0
- package/dist/monitor/event-normalizer.d.ts.map +1 -0
- package/dist/monitor/event-normalizer.js +195 -0
- package/dist/monitor/event-normalizer.js.map +1 -0
- package/dist/monitor/file-monitor.d.ts +90 -0
- package/dist/monitor/file-monitor.d.ts.map +1 -0
- package/dist/monitor/file-monitor.js +222 -0
- package/dist/monitor/file-monitor.js.map +1 -0
- package/dist/monitor/index.d.ts +147 -0
- package/dist/monitor/index.d.ts.map +1 -0
- package/dist/monitor/index.js +293 -0
- package/dist/monitor/index.js.map +1 -0
- package/dist/monitor/log-monitor.d.ts +102 -0
- package/dist/monitor/log-monitor.d.ts.map +1 -0
- package/dist/monitor/log-monitor.js +245 -0
- package/dist/monitor/log-monitor.js.map +1 -0
- package/dist/monitor/network-monitor.d.ts +103 -0
- package/dist/monitor/network-monitor.d.ts.map +1 -0
- package/dist/monitor/network-monitor.js +336 -0
- package/dist/monitor/network-monitor.js.map +1 -0
- package/dist/monitor/process-monitor.d.ts +108 -0
- package/dist/monitor/process-monitor.d.ts.map +1 -0
- package/dist/monitor/process-monitor.js +245 -0
- package/dist/monitor/process-monitor.js.map +1 -0
- package/dist/monitor/threat-intel-feeds.d.ts +141 -0
- package/dist/monitor/threat-intel-feeds.d.ts.map +1 -0
- package/dist/monitor/threat-intel-feeds.js +430 -0
- package/dist/monitor/threat-intel-feeds.js.map +1 -0
- package/dist/monitor/threat-intel.d.ts +83 -0
- package/dist/monitor/threat-intel.d.ts.map +1 -0
- package/dist/monitor/threat-intel.js +215 -0
- package/dist/monitor/threat-intel.js.map +1 -0
- package/dist/monitor/types.d.ts +65 -0
- package/dist/monitor/types.d.ts.map +1 -0
- package/dist/monitor/types.js +20 -0
- package/dist/monitor/types.js.map +1 -0
- package/dist/rules/index.d.ts +115 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +244 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/rule-loader.d.ts +54 -0
- package/dist/rules/rule-loader.d.ts.map +1 -0
- package/dist/rules/rule-loader.js +167 -0
- package/dist/rules/rule-loader.js.map +1 -0
- package/dist/rules/sigma-matcher.d.ts +40 -0
- package/dist/rules/sigma-matcher.d.ts.map +1 -0
- package/dist/rules/sigma-matcher.js +447 -0
- package/dist/rules/sigma-matcher.js.map +1 -0
- package/dist/rules/sigma-parser.d.ts +36 -0
- package/dist/rules/sigma-parser.d.ts.map +1 -0
- package/dist/rules/sigma-parser.js +180 -0
- package/dist/rules/sigma-parser.js.map +1 -0
- package/dist/rules/types.d.ts +112 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +11 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/rules/yara-scanner.d.ts +103 -0
- package/dist/rules/yara-scanner.d.ts.map +1 -0
- package/dist/rules/yara-scanner.js +421 -0
- package/dist/rules/yara-scanner.js.map +1 -0
- package/dist/scoring/achievements.d.ts +76 -0
- package/dist/scoring/achievements.d.ts.map +1 -0
- package/dist/scoring/achievements.js +211 -0
- package/dist/scoring/achievements.js.map +1 -0
- package/dist/scoring/index.d.ts +3 -0
- package/dist/scoring/index.d.ts.map +1 -0
- package/dist/scoring/index.js +3 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/scoring/security-score.d.ts +60 -0
- package/dist/scoring/security-score.d.ts.map +1 -0
- package/dist/scoring/security-score.js +211 -0
- package/dist/scoring/security-score.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +38 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +71 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +35 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +56 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security tool detection
|
|
3
|
+
* 安全工具偵測
|
|
4
|
+
*
|
|
5
|
+
* Detects installed and running security tools (antivirus, EDR, firewall,
|
|
6
|
+
* IDS, SIEM) by checking running processes, known service names, and
|
|
7
|
+
* common installation paths.
|
|
8
|
+
* 透過檢查執行中的行程、已知服務名稱和常見安裝路徑,偵測已安裝和執行中的安全工具
|
|
9
|
+
* (防毒、EDR、防火牆、IDS、SIEM)。
|
|
10
|
+
*
|
|
11
|
+
* @module @panguard-ai/core/discovery/security-tools
|
|
12
|
+
*/
|
|
13
|
+
import { execFile } from 'child_process';
|
|
14
|
+
import { promisify } from 'util';
|
|
15
|
+
import { platform as osPlatform } from 'os';
|
|
16
|
+
import { access } from 'fs/promises';
|
|
17
|
+
import { createLogger } from '../utils/logger.js';
|
|
18
|
+
const execFileAsync = promisify(execFile);
|
|
19
|
+
const logger = createLogger('discovery:security-tools');
|
|
20
|
+
/**
|
|
21
|
+
* Database of known security tools and their identifiers
|
|
22
|
+
* 已知安全工具及其識別碼的資料庫
|
|
23
|
+
*/
|
|
24
|
+
const KNOWN_SECURITY_TOOLS = [
|
|
25
|
+
{
|
|
26
|
+
name: 'Windows Defender',
|
|
27
|
+
vendor: 'Microsoft',
|
|
28
|
+
processNames: ['MsMpEng.exe', 'MpCmdRun.exe', 'NisSrv.exe', 'SecurityHealthService.exe'],
|
|
29
|
+
serviceName: 'WinDefend',
|
|
30
|
+
type: 'antivirus',
|
|
31
|
+
installPaths: ['C:\\Program Files\\Windows Defender'],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Wazuh',
|
|
35
|
+
vendor: 'Wazuh Inc.',
|
|
36
|
+
processNames: ['wazuh-agentd', 'wazuh-execd', 'wazuh-modulesd', 'ossec-agentd'],
|
|
37
|
+
serviceName: 'wazuh-agent',
|
|
38
|
+
type: 'siem',
|
|
39
|
+
installPaths: ['/var/ossec', '/Library/Ossec'],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'CrowdStrike Falcon',
|
|
43
|
+
vendor: 'CrowdStrike',
|
|
44
|
+
processNames: ['falcond', 'falcon-sensor', 'CSFalconService.exe', 'CSFalconContainer'],
|
|
45
|
+
serviceName: 'CSFalconService',
|
|
46
|
+
type: 'edr',
|
|
47
|
+
installPaths: ['/opt/CrowdStrike', '/Library/CS', 'C:\\Program Files\\CrowdStrike'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'Sophos',
|
|
51
|
+
vendor: 'Sophos',
|
|
52
|
+
processNames: [
|
|
53
|
+
'SophosScanD',
|
|
54
|
+
'SophosAntiVirus',
|
|
55
|
+
'savscand',
|
|
56
|
+
'SophosCleanM.exe',
|
|
57
|
+
'SophosHealth.exe',
|
|
58
|
+
],
|
|
59
|
+
serviceName: 'Sophos Anti-Virus',
|
|
60
|
+
type: 'antivirus',
|
|
61
|
+
installPaths: ['/opt/sophos-av', '/Library/Sophos Anti-Virus', 'C:\\Program Files\\Sophos'],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'Trend Micro',
|
|
65
|
+
vendor: 'Trend Micro',
|
|
66
|
+
processNames: ['ds_agent', 'dsa_query', 'coreServiceShell', 'PccNTMon.exe', 'TMBMSRV.exe'],
|
|
67
|
+
serviceName: 'ds_agent',
|
|
68
|
+
type: 'antivirus',
|
|
69
|
+
installPaths: ['/opt/ds_agent', 'C:\\Program Files\\Trend Micro'],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'Kaspersky',
|
|
73
|
+
vendor: 'Kaspersky',
|
|
74
|
+
processNames: ['klnagent', 'avp', 'avp.exe', 'kavfswh.exe'],
|
|
75
|
+
serviceName: 'klnagent',
|
|
76
|
+
type: 'antivirus',
|
|
77
|
+
installPaths: ['C:\\Program Files\\Kaspersky Lab', 'C:\\Program Files (x86)\\Kaspersky Lab'],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'Malwarebytes',
|
|
81
|
+
vendor: 'Malwarebytes',
|
|
82
|
+
processNames: ['MBAMService', 'mbamservice.exe', 'RTProtectionDaemon'],
|
|
83
|
+
serviceName: 'MBAMService',
|
|
84
|
+
type: 'antivirus',
|
|
85
|
+
installPaths: ['/Library/Application Support/Malwarebytes', 'C:\\Program Files\\Malwarebytes'],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'ESET',
|
|
89
|
+
vendor: 'ESET',
|
|
90
|
+
processNames: ['esets_daemon', 'ekrn.exe', 'egui.exe', 'essod'],
|
|
91
|
+
serviceName: 'esets_daemon',
|
|
92
|
+
type: 'antivirus',
|
|
93
|
+
installPaths: ['/opt/eset', 'C:\\Program Files\\ESET'],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'pfSense',
|
|
97
|
+
vendor: 'Netgate',
|
|
98
|
+
processNames: ['pf', 'pflogd', 'pfctl'],
|
|
99
|
+
type: 'firewall',
|
|
100
|
+
installPaths: ['/usr/local/sbin/pfctl'],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'Fortinet FortiClient',
|
|
104
|
+
vendor: 'Fortinet',
|
|
105
|
+
processNames: ['forticlient', 'FortiClient.exe', 'FortiTray.exe', 'FCDBLog.exe'],
|
|
106
|
+
serviceName: 'FortiClientMonitor',
|
|
107
|
+
type: 'edr',
|
|
108
|
+
installPaths: ['/opt/forticlient', 'C:\\Program Files\\Fortinet'],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'Snort',
|
|
112
|
+
vendor: 'Cisco',
|
|
113
|
+
processNames: ['snort'],
|
|
114
|
+
serviceName: 'snort',
|
|
115
|
+
type: 'ids',
|
|
116
|
+
installPaths: ['/usr/local/bin/snort', '/usr/sbin/snort'],
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'Suricata',
|
|
120
|
+
vendor: 'OISF',
|
|
121
|
+
processNames: ['suricata'],
|
|
122
|
+
serviceName: 'suricata',
|
|
123
|
+
type: 'ids',
|
|
124
|
+
installPaths: ['/usr/bin/suricata', '/usr/local/bin/suricata'],
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'OSSEC',
|
|
128
|
+
vendor: 'OSSEC Foundation',
|
|
129
|
+
processNames: ['ossec-analysisd', 'ossec-syscheckd', 'ossec-remoted'],
|
|
130
|
+
serviceName: 'ossec',
|
|
131
|
+
type: 'ids',
|
|
132
|
+
installPaths: ['/var/ossec'],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'ClamAV',
|
|
136
|
+
vendor: 'ClamAV',
|
|
137
|
+
processNames: ['clamd', 'freshclam', 'clamdscan'],
|
|
138
|
+
serviceName: 'clamav-daemon',
|
|
139
|
+
type: 'antivirus',
|
|
140
|
+
installPaths: ['/usr/bin/clamscan', '/usr/local/bin/clamscan'],
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'Splunk',
|
|
144
|
+
vendor: 'Splunk',
|
|
145
|
+
processNames: ['splunkd', 'splunk-optimize'],
|
|
146
|
+
serviceName: 'Splunkd',
|
|
147
|
+
type: 'siem',
|
|
148
|
+
installPaths: ['/opt/splunk', '/opt/splunkforwarder', 'C:\\Program Files\\Splunk'],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'Elastic Agent',
|
|
152
|
+
vendor: 'Elastic',
|
|
153
|
+
processNames: ['elastic-agent', 'filebeat', 'metricbeat', 'auditbeat'],
|
|
154
|
+
serviceName: 'elastic-agent',
|
|
155
|
+
type: 'siem',
|
|
156
|
+
installPaths: ['/opt/Elastic', 'C:\\Program Files\\Elastic'],
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'Carbon Black',
|
|
160
|
+
vendor: 'VMware',
|
|
161
|
+
processNames: ['cbagentd', 'cbdaemon', 'CbDefense.exe'],
|
|
162
|
+
serviceName: 'CbDefense',
|
|
163
|
+
type: 'edr',
|
|
164
|
+
installPaths: ['/opt/carbonblack', 'C:\\Program Files\\Confer'],
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'SentinelOne',
|
|
168
|
+
vendor: 'SentinelOne',
|
|
169
|
+
processNames: ['sentinelone-agent', 'SentinelAgent.exe', 'sentineld'],
|
|
170
|
+
serviceName: 'SentinelAgent',
|
|
171
|
+
type: 'edr',
|
|
172
|
+
installPaths: ['/opt/sentinelone', 'C:\\Program Files\\SentinelOne'],
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
/**
|
|
176
|
+
* Safely execute a command and return stdout, or empty string on failure
|
|
177
|
+
* 安全地執行命令並回傳 stdout,失敗時回傳空字串
|
|
178
|
+
*
|
|
179
|
+
* @param cmd - Command to execute / 要執行的命令
|
|
180
|
+
* @param args - Command arguments / 命令參數
|
|
181
|
+
* @returns stdout output trimmed / 修剪後的 stdout 輸出
|
|
182
|
+
*/
|
|
183
|
+
async function safeExec(cmd, args) {
|
|
184
|
+
try {
|
|
185
|
+
const { stdout } = await execFileAsync(cmd, args, { timeout: 10_000 });
|
|
186
|
+
return stdout.trim();
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
logger.debug(`Command failed: ${cmd} ${args.join(' ')}`, {
|
|
190
|
+
error: err instanceof Error ? err.message : String(err),
|
|
191
|
+
});
|
|
192
|
+
return '';
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get list of currently running process names
|
|
197
|
+
* 取得目前執行中的行程名稱列表
|
|
198
|
+
*
|
|
199
|
+
* @returns Set of lowercase process names / 小寫行程名稱集合
|
|
200
|
+
*/
|
|
201
|
+
async function getRunningProcesses() {
|
|
202
|
+
const processes = new Set();
|
|
203
|
+
const currentPlatform = osPlatform();
|
|
204
|
+
try {
|
|
205
|
+
let output = '';
|
|
206
|
+
switch (currentPlatform) {
|
|
207
|
+
case 'darwin':
|
|
208
|
+
case 'linux':
|
|
209
|
+
output = await safeExec('ps', ['aux']);
|
|
210
|
+
break;
|
|
211
|
+
case 'win32':
|
|
212
|
+
output = await safeExec('tasklist', ['/FO', 'CSV', '/NH']);
|
|
213
|
+
break;
|
|
214
|
+
default:
|
|
215
|
+
return processes;
|
|
216
|
+
}
|
|
217
|
+
if (!output)
|
|
218
|
+
return processes;
|
|
219
|
+
const lines = output.split('\n');
|
|
220
|
+
for (const line of lines) {
|
|
221
|
+
if (currentPlatform === 'win32') {
|
|
222
|
+
// CSV format: "process.exe","PID",...
|
|
223
|
+
// CSV 格式:"process.exe","PID",...
|
|
224
|
+
const match = line.match(/^"([^"]+)"/);
|
|
225
|
+
if (match?.[1]) {
|
|
226
|
+
processes.add(match[1].toLowerCase());
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
// Unix ps aux format: USER PID ... COMMAND
|
|
231
|
+
// Unix ps aux 格式:USER PID ... COMMAND
|
|
232
|
+
const parts = line.trim().split(/\s+/);
|
|
233
|
+
if (parts.length >= 11) {
|
|
234
|
+
const cmd = parts[10] ?? '';
|
|
235
|
+
// Extract just the binary name from the full path
|
|
236
|
+
// 從完整路徑中僅擷取二進位檔案名稱
|
|
237
|
+
const binaryName = cmd.split('/').pop()?.split('\\').pop() ?? '';
|
|
238
|
+
if (binaryName) {
|
|
239
|
+
processes.add(binaryName.toLowerCase());
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
logger.error('Failed to enumerate running processes', {
|
|
247
|
+
error: err instanceof Error ? err.message : String(err),
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
return processes;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Check if a file/directory exists at the given path
|
|
254
|
+
* 檢查給定路徑是否存在檔案/目錄
|
|
255
|
+
*
|
|
256
|
+
* @param filePath - Path to check / 要檢查的路徑
|
|
257
|
+
* @returns Whether the path exists / 路徑是否存在
|
|
258
|
+
*/
|
|
259
|
+
async function pathExists(filePath) {
|
|
260
|
+
try {
|
|
261
|
+
await access(filePath);
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Detect installed and running security tools on the system
|
|
270
|
+
* 偵測系統上已安裝和執行中的安全工具
|
|
271
|
+
*
|
|
272
|
+
* Detection methods:
|
|
273
|
+
* 1. Check running processes against known process names
|
|
274
|
+
* 2. Check service list against known service names
|
|
275
|
+
* 3. Check common installation paths
|
|
276
|
+
* 偵測方法:
|
|
277
|
+
* 1. 比對執行中行程與已知行程名稱
|
|
278
|
+
* 2. 比對服務列表與已知服務名稱
|
|
279
|
+
* 3. 檢查常見安裝路徑
|
|
280
|
+
*
|
|
281
|
+
* @param services - Previously detected services list / 先前偵測到的服務列表
|
|
282
|
+
* @returns Array of detected security tools / 偵測到的安全工具陣列
|
|
283
|
+
*/
|
|
284
|
+
export async function detectSecurityTools(services) {
|
|
285
|
+
const detectedTools = [];
|
|
286
|
+
const processSet = await getRunningProcesses();
|
|
287
|
+
logger.info(`Checking ${KNOWN_SECURITY_TOOLS.length} known security tools against ${processSet.size} running processes`);
|
|
288
|
+
// Build a set of running service names for quick lookup
|
|
289
|
+
// 建立執行中服務名稱集合以快速查找
|
|
290
|
+
const runningServiceNames = new Set(services.filter((s) => s.status === 'running').map((s) => s.name.toLowerCase()));
|
|
291
|
+
for (const tool of KNOWN_SECURITY_TOOLS) {
|
|
292
|
+
let running = false;
|
|
293
|
+
let foundViaProcess = false;
|
|
294
|
+
let foundViaService = false;
|
|
295
|
+
let foundViaPath = false;
|
|
296
|
+
// Check 1: Running processes
|
|
297
|
+
// 檢查 1:執行中行程
|
|
298
|
+
for (const processName of tool.processNames) {
|
|
299
|
+
if (processSet.has(processName.toLowerCase())) {
|
|
300
|
+
running = true;
|
|
301
|
+
foundViaProcess = true;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Check 2: Service names
|
|
306
|
+
// 檢查 2:服務名稱
|
|
307
|
+
if (!foundViaProcess && tool.serviceName) {
|
|
308
|
+
if (runningServiceNames.has(tool.serviceName.toLowerCase())) {
|
|
309
|
+
running = true;
|
|
310
|
+
foundViaService = true;
|
|
311
|
+
}
|
|
312
|
+
// Also check if the service exists but isn't running
|
|
313
|
+
// 同時檢查服務是否存在但未執行
|
|
314
|
+
const matchingService = services.find((s) => s.name.toLowerCase() === tool.serviceName.toLowerCase());
|
|
315
|
+
if (matchingService && !foundViaService) {
|
|
316
|
+
foundViaService = true;
|
|
317
|
+
running = matchingService.status === 'running';
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// Check 3: Install paths
|
|
321
|
+
// 檢查 3:安裝路徑
|
|
322
|
+
if (!foundViaProcess && !foundViaService && tool.installPaths) {
|
|
323
|
+
for (const installPath of tool.installPaths) {
|
|
324
|
+
if (await pathExists(installPath)) {
|
|
325
|
+
foundViaPath = true;
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (foundViaProcess || foundViaService || foundViaPath) {
|
|
331
|
+
const detected = {
|
|
332
|
+
name: tool.name,
|
|
333
|
+
vendor: tool.vendor,
|
|
334
|
+
running,
|
|
335
|
+
type: tool.type,
|
|
336
|
+
};
|
|
337
|
+
logger.info(`Detected security tool: ${tool.name} (${tool.vendor}) - ${running ? 'running' : 'installed but not running'}`, {
|
|
338
|
+
detectedVia: foundViaProcess ? 'process' : foundViaService ? 'service' : 'path',
|
|
339
|
+
});
|
|
340
|
+
detectedTools.push(detected);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
logger.info(`Total security tools detected: ${detectedTools.length}`);
|
|
344
|
+
return detectedTools;
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=security-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-tools.js","sourceRoot":"","sources":["../../src/discovery/security-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,IAAI,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAqBxD;;;GAGG;AACH,MAAM,oBAAoB,GAAwB;IAChD;QACE,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,WAAW;QACnB,YAAY,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,2BAA2B,CAAC;QACxF,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,qCAAqC,CAAC;KACtD;IACD;QACE,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,YAAY;QACpB,YAAY,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,CAAC;QAC/E,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;KAC/C;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;QACtF,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,CAAC,kBAAkB,EAAE,aAAa,EAAE,gCAAgC,CAAC;KACpF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE;YACZ,aAAa;YACb,iBAAiB;YACjB,UAAU;YACV,kBAAkB;YAClB,kBAAkB;SACnB;QACD,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,2BAA2B,CAAC;KAC5F;IACD;QACE,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,CAAC;QAC1F,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,eAAe,EAAE,gCAAgC,CAAC;KAClE;IACD;QACE,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,WAAW;QACnB,YAAY,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC;QAC3D,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,kCAAkC,EAAE,wCAAwC,CAAC;KAC7F;IACD;QACE,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,cAAc;QACtB,YAAY,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,CAAC;QACtE,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,2CAA2C,EAAE,iCAAiC,CAAC;KAC/F;IACD;QACE,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC;QAC/D,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,WAAW,EAAE,yBAAyB,CAAC;KACvD;IACD;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;QACvC,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,CAAC,uBAAuB,CAAC;KACxC;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,UAAU;QAClB,YAAY,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,CAAC;QAChF,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;KAClE;IACD;QACE,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,OAAO;QACf,YAAY,EAAE,CAAC,OAAO,CAAC;QACvB,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;KAC1D;IACD;QACE,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,UAAU,CAAC;QAC1B,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;KAC/D;IACD;QACE,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,kBAAkB;QAC1B,YAAY,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,CAAC;QACrE,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,CAAC,YAAY,CAAC;KAC7B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC;QACjD,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;KAC/D;IACD;QACE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC;QAC5C,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,CAAC,aAAa,EAAE,sBAAsB,EAAE,2BAA2B,CAAC;KACnF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC;QACtE,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,CAAC,cAAc,EAAE,4BAA4B,CAAC;KAC7D;IACD;QACE,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC;QACvD,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;KAChE;IACD;QACE,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,CAAC;QACrE,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,CAAC,kBAAkB,EAAE,gCAAgC,CAAC;KACrE;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAc;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;YACvD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,mBAAmB;IAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,eAAe,GAAG,UAAU,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,QAAQ,eAAe,EAAE,CAAC;YACxB,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO;gBACV,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3D,MAAM;YACR;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;gBAChC,sCAAsC;gBACtC,iCAAiC;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACvC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACf,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,2CAA2C;gBAC3C,sCAAsC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;oBAC5B,kDAAkD;oBAClD,mBAAmB;oBACnB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;oBACjE,IAAI,UAAU,EAAE,CAAC;wBACf,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;YACpD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAuB;IAC/D,MAAM,aAAa,GAAmB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAE/C,MAAM,CAAC,IAAI,CACT,YAAY,oBAAoB,CAAC,MAAM,iCAAiC,UAAU,CAAC,IAAI,oBAAoB,CAC5G,CAAC;IAEF,wDAAwD;IACxD,mBAAmB;IACnB,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAChF,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,6BAA6B;QAC7B,aAAa;QACb,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC9C,OAAO,GAAG,IAAI,CAAC;gBACf,eAAe,GAAG,IAAI,CAAC;gBACvB,MAAM;YACR,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,YAAY;QACZ,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC5D,OAAO,GAAG,IAAI,CAAC;gBACf,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YACD,qDAAqD;YACrD,iBAAiB;YACjB,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAY,CAAC,WAAW,EAAE,CAChE,CAAC;YACF,IAAI,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;gBACxC,eAAe,GAAG,IAAI,CAAC;gBACvB,OAAO,GAAG,eAAe,CAAC,MAAM,KAAK,SAAS,CAAC;YACjD,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,YAAY;QACZ,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9D,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC5C,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClC,YAAY,GAAG,IAAI,CAAC;oBACpB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,eAAe,IAAI,eAAe,IAAI,YAAY,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAiB;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;YAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B,EAAE,EAC9G;gBACE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;aAChF,CACF,CAAC;YAEF,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,kCAAkC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running services detection
|
|
3
|
+
* 執行中服務偵測
|
|
4
|
+
*
|
|
5
|
+
* Detects and enumerates running services across macOS, Linux, and Windows
|
|
6
|
+
* using platform-specific service management commands.
|
|
7
|
+
* 使用平台特定的服務管理命令,跨 macOS、Linux 和 Windows 偵測並列舉執行中的服務。
|
|
8
|
+
*
|
|
9
|
+
* @module @panguard-ai/core/discovery/service-detector
|
|
10
|
+
*/
|
|
11
|
+
import type { ServiceInfo } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Detect all running services on the current platform
|
|
14
|
+
* 偵測目前平台上所有執行中的服務
|
|
15
|
+
*
|
|
16
|
+
* Dispatches to platform-specific detection methods:
|
|
17
|
+
* - macOS: launchctl list
|
|
18
|
+
* - Linux: systemctl list-units
|
|
19
|
+
* - Windows: sc query / net start
|
|
20
|
+
* 分派到平台特定的偵測方法:
|
|
21
|
+
* - macOS:launchctl list
|
|
22
|
+
* - Linux:systemctl list-units
|
|
23
|
+
* - Windows:sc query / net start
|
|
24
|
+
*
|
|
25
|
+
* @returns Array of detected services / 偵測到的服務陣列
|
|
26
|
+
*/
|
|
27
|
+
export declare function detectServices(): Promise<ServiceInfo[]>;
|
|
28
|
+
//# sourceMappingURL=service-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-detector.d.ts","sourceRoot":"","sources":["../../src/discovery/service-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAiR9C;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAiC7D"}
|