將 RoamSwitch 的診斷能力直接帶入你自己的 Mac / Linux 應用程式
RoamSwitchKit(Mac)與 roamswitch-linux-kit(Linux)是免費開源用戶端,可讓你的 Swift / Rust 程式碼直接查詢 RoamSwitch 本體計算出的安全診斷結果。無需自行實作 ARP 監控或連接埠掃描,即可將「目前網路是否安全」整合進自己的應用程式。
🔒 為什麼安全
- 唯讀:不存在切換鎖定、隔離連接埠、退出裝置等操作類 API。串接此套件的應用程式無法在未經使用者同意的情況下變更 RoamSwitch 的設定。
- 完全本地:以子行程方式啟動 RoamSwitch 本體內建的執行檔(macOS: RoamSwitchMCPServer / Linux: roamswitch-mcp),僅透過標準輸入輸出通訊,絕不向外部伺服器傳送任何內容。
- 免費開源:基於 MIT 授權發布,任何人都能自由查看原始碼並整合使用。
在套件管理器中新增一行
只需加入 Package.swift 的 dependencies 即可。前提是 macOS 12+、Swift 5.9+,並已安裝 RoamSwitch 1.3.0 或更新版本。
dependencies: [
.package(url: "https://github.com/lafine1211/RoamSwitchKit.git", from: "1.0.0")
]
只需加入 Cargo.toml 的 dependencies 即可。前提是已安裝穩定版 Rust(2021 edition、tokio 非同步執行環境)以及包含 roamswitch-mcp 執行檔的 RoamSwitch for Linux。
[dependencies]
roamswitch-linux-kit = { git = "https://github.com/lafine1211/roamswitch-linux-kit", tag = "v0.1.0" }
透過簡單方法取得診斷結果
import RoamSwitchKit
let client = try RoamSwitchClient()
let report = try await client.securityReport()
print(report.score, report.grade)
let ports = try await client.exposedPorts()
for port in ports.ports where port.overallRisk == "high" {
print(port.processName, port.port)
}
let status = try await client.guardStatus()
print(status.activeSecurityLevelLabel, status.isCurrentNetworkTrusted)
let urlReport = try await client.auditURLSafety(url: "https://apple.com.login-verify.xyz")
print(urlReport.score, urlReport.riskLevel) // e.g. 20, "dangerous"
use roamswitch_linux_kit::RoamSwitchClient;
let client = RoamSwitchClient::new(None, None)?;
let report = client.security_report().await?;
println!("{} ({})", report.score, report.grade);
let ports = client.exposed_ports(false).await?;
for port in ports.ports.iter().filter(|p| p.overall_risk.as_deref() == Some("high")) {
println!("{} {}", port.process_name, port.port);
}
let status = client.guard_status().await?;
println!("{} {}", status.active_security_level_label, status.is_current_network_trusted);
let url_report = client.audit_url_safety("https://apple.com.login-verify.xyz").await?;
println!("{} {}", url_report.score, url_report.risk_level); // e.g. 20, "dangerous"
唯讀方法
securityReport()
取得涵蓋 FileVault、SIP、Gatekeeper、防火牆、Wi-Fi 加密強度、ARP 欺騙、外部暴露連接埠等 18 項綜合診斷的評分與改進建議。
exposedPorts(includeLocalOnly:)
列出目前監聽的所有連接埠,對外暴露的連接埠會回傳包含已知危險服務(Redis/MongoDB 等)判定在內的詳細稽核結果。
guardStatus()
取得連接埠防護、ARP自動遏制、USB防護、藍牙防護、網頁/郵件下載保護、DNS威脅防護狀態及當前安全等級。
auditURLSafety(url:)
於本機分析可疑連結或縮網址,檢測網路釣魚、Unicode同形偽裝及高風險TLD(Zero Telemetry)。
其他唯讀方法
| 方法 | 概要 |
|---|---|
auditSecurityLogs(hours:) | 彙總近期安全記錄(Mac:Sudo 驗證失敗、SSH 暴力破解嘗試、Gatekeeper 攔截、XProtect 偵測等 / Linux:Sudo 驗證失敗、SSH 暴力破解、防火牆攔截、AppArmor 拒絕、ClamAV 偵測等),自動遮蔽 API 金鑰、權杖等機密資訊,並回傳以記錄範本化的新模式偵測與頻率異常(統計突增)偵測結果。 |
activeVulnScan() | 僅限 127.0.0.1 的非破壞性實證漏洞驗證。唯一會使用網路的工具,預設關閉,需於設定中主動啟用。 |
packageCveScan() | 將已安裝的套件(Mac:Homebrew / Linux:dpkg・dnf・zypper・pacman)與本機 CVE 對照表比對。完全不產生任何網路通訊。 |
packageCveScanLanguages(watchedFolders:) | 將 npm / PyPI / crates.io / RubyGems / Packagist / Go / Maven 等相依性鎖定檔與同一本機 CVE 對照表比對。完全不產生任何網路通訊。 |
canaryStatus() | 回傳勒索軟體誘餌檔案(Canary)的佈署狀態,以及最近 50 筆偵測事件。 |
portAnomalyIncidents() | 回傳連接埠異常防護的基準狀態、目前自動阻斷的連接埠,以及最近 50 筆事件。回應中明確註明:目前自動阻斷的連接埠是不含時間戳記的當前狀態快照,與含時間戳記的事件歷史是兩回事。 |
runtimeThreatStatus() | 回傳是否因 XProtect 偵測到惡意軟體而進入 Air-Gap 隔離,以及觸發該隔離的事件。排查 Air-Gap 原因時應最先檢視此工具。 |
notificationHistory() | 回傳 RoamSwitch 傳送的通知(安全記錄稽核異常、ClickFix 偵測等)歷史記錄,最近1週、最新在前。 |
各回傳型別的欄位定義以原始 Swift 型別宣告的形式收錄於 GitHub 上的 README 與 AGENTS.md。
security_report()
取得涵蓋 LUKS/dm-crypt 磁碟加密、UEFI Secure Boot、AppArmor/SELinux、sudo/SSH 設定、ARP 竄改、外部公開連接埠等 24 項綜合診斷得出的評分與改善建議。
exposed_ports(include_local_only)
列出目前監聽的所有連接埠,對外暴露的連接埠會回傳包含已知危險服務(Redis/MongoDB 等)判定在內的詳細稽核結果。
guard_status()
取得連接埠防護、ARP自動遏制、USB防護、藍牙防護、網頁/郵件下載保護、DNS威脅防護狀態及當前安全等級。
audit_url_safety(url)
於本機分析可疑連結或縮網址,檢測網路釣魚、Unicode同形偽裝及高風險TLD(Zero Telemetry)。
其他唯讀方法
| 方法 | 概要 |
|---|---|
server_security_report() | 以伺服器版的 30 項設定檔(核心強化、容器隔離、核心 CVE 暴露、eBPF LSM)執行綜合診斷。 |
run_active_vuln_scan() | 僅限 127.0.0.1 的非破壞性實證漏洞驗證。唯一會使用網路的工具,預設關閉,需於設定中主動啟用。 |
audit_secrets(text) | 從文字、檔案或目錄中偵測外洩的 API Key 與私密金鑰(偵測值於輸出時已遮蔽)。 |
audit_security_logs(hours) | 彙總近期安全記錄(Mac:Sudo 驗證失敗、SSH 暴力破解嘗試、Gatekeeper 攔截、XProtect 偵測等 / Linux:Sudo 驗證失敗、SSH 暴力破解、防火牆攔截、AppArmor 拒絕、ClamAV 偵測等),自動遮蔽 API 金鑰、權杖等機密資訊,並回傳以記錄範本化的新模式偵測與頻率異常(統計突增)偵測結果。 |
get_app_help(query, topic) | 於本機即時檢索涵蓋RoamSwitch所有功能規格、底層機制、警報通知及疑難排解的官方知識庫,提供準確的技術解說與處置建議。 |
quarantine_status() | 回傳惡意軟體隔離 Vault 的內容(原始路徑、偵測到的威脅名稱、隔離時間與大小)。 |
canary_status() | 回傳勒索軟體誘餌檔案(Canary)的佈署狀態,以及最近 50 筆偵測事件。 |
package_cve_scan() | 將已安裝的套件(Mac:Homebrew / Linux:dpkg・dnf・zypper・pacman)與本機 CVE 對照表比對。完全不產生任何網路通訊。 |
package_cve_scan_languages(watched_folders) | 將 npm / PyPI / crates.io / RubyGems / Packagist / Go / Maven 等相依性鎖定檔與同一本機 CVE 對照表比對。完全不產生任何網路通訊。 |
verify_fim() | 對約 150 處關鍵系統檔案重新計算雜湊,並與基準比對以驗證是否遭竄改。 |
get_port_anomaly_incidents() | 回傳連接埠異常防護的基準狀態、目前自動阻斷的連接埠,以及最近 50 筆事件。回應中明確註明:目前自動阻斷的連接埠是不含時間戳記的當前狀態快照,與含時間戳記的事件歷史是兩回事。 |
get_ebpf_incidents() | 回傳 eBPF 執行期防護的目前隔離狀態,以及觸發隔離的事件歷程。 |
各回傳型別的欄位定義以原始 Rust 型別宣告的形式收錄於 GitHub 上的 README。
可以這樣整合
以下為 Swift(Mac)範例。roamswitch-linux-kit(Linux)也提供同名方法(snake_case 命名)達成相同效果。
同步/備份類應用程式
連接到不受信任的網路時,自動暫停背景同步。
let status = try await client.guardStatus()
if !status.isCurrentNetworkTrusted {
syncEngine.pauseBackgroundSync()
}
密碼管理器
在不受信任的網路下縮短自動鎖定時間等,依保護等級調整行為。
let status = try await client.guardStatus() let lockTimeout: TimeInterval = status.isCurrentNetworkTrusted ? 300 : 30 vault.setAutoLockTimeout(lockTimeout)
開發者工具與自動化
在開發伺服器開始監聽 0.0.0.0 時發出警告,或用 Shortcuts 等建構依網路信任度反應的工作流程。
let ports = try await client.exposedPorts(includeLocalOnly: false)
for port in ports.ports where [3000, 5173, 8000, 11434, 1234].contains(port.port) {
print("⚠️ Dev/AI server exposed on port \(port.port)")
}
郵件與聊天應用程式中的連結預先檢查
在顯示前自動掃描收到訊息中的連結,僅對危險連結發出警告。
let result = try await client.auditURLSafety(url: link)
if result.riskLevel == "dangerous" || result.riskLevel == "suspicious" {
showWarningBanner(for: link, score: result.score)
}
右鍵選單/捷徑的安全性檢查
接入 Finder 的「服務」選單或 macOS 捷徑,一鍵檢查複製的 URL。
// 從 macOS 捷徑 (App Intent) 或「服務」選單的處理程式中呼叫
let report = try await client.auditURLSafety(url: pasteboardURL)
return "\(report.riskLevel.uppercased()) (\(report.score)/100)"
IT 資產管理與 MDM 儀表板
從組織內多台 Mac 收集分數,在管理員儀表板中彙整並觸發警示。
let report = try await client.securityReport() try await mdmAPI.reportScore(deviceID: deviceID, score: report.score, grade: report.grade)
關於 SDK
Q. 可以免費使用嗎?
A. 是的。RoamSwitchKit(Mac)與 roamswitch-linux-kit(Linux)皆基於 MIT 授權免費發布。它們需要預先安裝 RoamSwitch 本體(診斷引擎),但 SDK 本身不收取任何費用。
Q. 能否變更使用者的設定?
A. 不能。它是唯讀的,沒有實作任何切換鎖定、隔離連接埠之類的操作類 API。整合此套件的應用程式無法在未經使用者同意的情況下變更 RoamSwitch 的保護設定。
Q. 如果沒有安裝 RoamSwitch 會怎樣?
A. 會回傳對應的錯誤(Mac: RoamSwitchClientError.appNotInstalled / Linux: RoamSwitchClientError::AppNotInstalled)。建議對此進行妥善處理(例如隱藏相關功能),而非當作致命錯誤。
Q. 想將 RoamSwitch 本體隨自家產品綁定發行怎麼辦?
A. SDK 整合(本頁內容)可繼續免費自由使用,但綁定發行 RoamSwitch 本體需要 OEM 授權。請點此諮詢 OEM 與合作夥伴綁定。