Bringen Sie RoamSwitchs Diagnosen direkt in Ihre eigene Mac- oder Linux-App
RoamSwitchKit (macOS) und roamswitch-linux-kit (Linux) sind kostenlose Open-Source-Clients, mit denen Ihr Swift- oder Rust-Code direkt dieselben Sicherheitsdiagnosen abfragen kann, die RoamSwitch selbst berechnet. Bauen Sie „Ist dieses Netzwerk gerade sicher?“ in Ihre eigene App ein, ohne ARP-Überwachung oder Portscans selbst zu implementieren.
🔒 Warum es sicher ist
- Nur lesend: Es gibt keine API zum Umschalten der Sperre, zum Isolieren eines Ports oder zum Auswerfen eines Geräts. Eine App, die dieses Paket einbindet, kann RoamSwitchs Einstellungen nicht ohne Zustimmung des Nutzers ändern.
- Vollständig lokal: Die mit RoamSwitch gebündelte Binärdatei (macOS: RoamSwitchMCPServer / Linux: roamswitch-mcp) wird als Subprozess gestartet und kommuniziert ausschließlich über stdio. Es wird niemals etwas an einen externen Server gesendet.
- Kostenlos und Open Source: veröffentlicht unter der MIT-Lizenz — jeder kann den Quellcode einsehen und frei einbinden.
Eine Zeile in Ihrem Paketmanager
Fügen Sie es einfach zu den Dependencies Ihrer Package.swift hinzu. Voraussetzung sind macOS 12+, Swift 5.9+ sowie eine installierte RoamSwitch-Version 1.3.0 oder neuer.
dependencies: [
.package(url: "https://github.com/lafine1211/RoamSwitchKit.git", from: "1.0.0")
]
Fügen Sie es einfach zu den Dependencies Ihrer Cargo.toml hinzu. Voraussetzung ist ein stabiler Rust-Toolchain (2021 Edition, tokio-Async-Runtime) sowie eine installierte RoamSwitch-for-Linux-Version (die die Binärdatei roamswitch-mcp mitbringt).
[dependencies]
roamswitch-linux-kit = { git = "https://github.com/lafine1211/roamswitch-linux-kit", tag = "v0.1.0" }
Diagnosen mit wenigen Methoden abrufen
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"
Schreibgeschützte Methoden
securityReport()
Liefert eine bewertete, umfassende Prüfung über 18 Kriterien — FileVault, SIP, Gatekeeper, Firewall, WLAN-Verschlüsselungsstärke, ARP-Spoofing, offene Ports und mehr — mit Empfehlungen für alles, was fehlschlägt.
exposedPorts(includeLocalOnly:)
Listet jeden aktuell lauschenden Port auf und liefert für alles, was über localhost hinaus offen ist, eine detaillierte Prüfung einschließlich bekannter gefährlicher Dienste (Redis, MongoDB usw.).
guardStatus()
Ruft den Status von Port-Guard, ARP-Schutz, USB-Guard, Bluetooth-Guard, Web/Mail-Download-Schutz, DNS-Bedrohungsschutz und die Sicherheitsstufe ab.
auditURLSafety(url:)
Analysiert verdächtige Links oder Kurz-URLs lokal auf Phishing, Unicode-Homographen und riskante TLDs (Zero Telemetry).
Weitere schreibgeschützte Methoden
| Methode | Kurzbeschreibung |
|---|---|
auditSecurityLogs(hours:) | Wertet aktuelle Sicherheitslogs aus (Mac: fehlgeschlagene Sudo-Authentifizierungen, SSH-Brute-Force-Versuche, Gatekeeper-Blockaden, XProtect-Erkennungen usw. / Linux: fehlgeschlagene Sudo-Authentifizierungen, SSH-Brute-Force, Firewall-Blockaden, AppArmor-Ablehnungen, ClamAV-Erkennungen usw.), maskiert automatisch sensible Daten wie API-Schlüssel und Tokens und liefert zusätzlich Ergebnisse der Log-Template-basierten Erkennung neuer Muster sowie der Häufigkeitsanomalie-Erkennung (statistische Spitzen). |
activeVulnScan() | Nicht-destruktive, ausschließlich auf 127.0.0.1 beschränkte aktive Schwachstellenprüfung. Das einzige Tool, das das Netzwerk nutzt — standardmäßig deaktiviert und nur nach Zustimmung in den Einstellungen. |
packageCveScan() | Gleicht installierte Pakete (Mac: Homebrew / Linux: dpkg, dnf, zypper, pacman) mit einer lokalen CVE-Zuordnung ab. Es findet überhaupt keine Netzwerkkommunikation statt. |
packageCveScanLanguages(watchedFolders:) | Gleicht Abhängigkeits-Lockfiles für npm, PyPI, crates.io, RubyGems, Packagist, Go und Maven mit derselben lokalen CVE-Zuordnung ab. Es findet überhaupt keine Netzwerkkommunikation statt. |
canaryStatus() | Liefert den Zustand der Ransomware-Köderdateien (Canary) sowie bis zu die 50 jüngsten erkannten Vorfälle. |
portAnomalyIncidents() | Liefert den Baseline-Zustand des Port-Anomalie-Schutzes, aktuell automatisch blockierte Ports und bis zu die 50 jüngsten Vorfälle. Die Antwort weist ausdrücklich darauf hin, dass die aktuell blockierten Ports eine zeitstempellose Momentaufnahme sind, die sich von der zeitgestempelten Vorfallshistorie unterscheidet. |
runtimeThreatStatus() | Gibt an, ob dieser Mac wegen eines XProtect-Malwarefunds per Air-Gap isoliert wurde, und nennt den auslösenden Vorfall. Bei aktivem Air-Gap zuerst prüfen. |
notificationHistory() | Gibt den Verlauf der von RoamSwitch gesendeten Benachrichtigungen (Sicherheitslog-Auffälligkeiten, ClickFix-Erkennungen u. a.) der letzten 7 Tage zurück, neueste zuerst. |
Die Felder aller Rückgabetypen sind als reine Swift-Deklarationen in der README auf GitHub und in AGENTS.md dokumentiert.
security_report()
Liefert eine Bewertung und Empfehlungen aus einer 24-Punkte-Prüfung, die LUKS/dm-crypt-Festplattenverschlüsselung, UEFI Secure Boot, AppArmor/SELinux, sudo/SSH-Konfiguration, ARP-Spoofing und offene Ports abdeckt.
exposed_ports(include_local_only)
Listet jeden aktuell lauschenden Port auf und liefert für alles, was über localhost hinaus offen ist, eine detaillierte Prüfung einschließlich bekannter gefährlicher Dienste (Redis, MongoDB usw.).
guard_status()
Ruft den Status von Port-Guard, ARP-Schutz, USB-Guard, Bluetooth-Guard, Web/Mail-Download-Schutz, DNS-Bedrohungsschutz und die Sicherheitsstufe ab.
audit_url_safety(url)
Analysiert verdächtige Links oder Kurz-URLs lokal auf Phishing, Unicode-Homographen und riskante TLDs (Zero Telemetry).
Weitere schreibgeschützte Methoden
| Methode | Kurzbeschreibung |
|---|---|
server_security_report() | Führt statt der Desktop-Prüfung das 30-Punkte-Profil der Server Edition aus (Kernel-Härtung, Container-Isolation, Kernel-CVE-Exposition, eBPF LSM). |
run_active_vuln_scan() | Nicht-destruktive, ausschließlich auf 127.0.0.1 beschränkte aktive Schwachstellenprüfung. Das einzige Tool, das das Netzwerk nutzt — standardmäßig deaktiviert und nur nach Zustimmung in den Einstellungen. |
audit_secrets(text) | Erkennt offengelegte API-Schlüssel und private Schlüssel in Text, Dateien oder Verzeichnisbäumen (Treffer werden in der Ausgabe maskiert). |
audit_security_logs(hours) | Wertet aktuelle Sicherheitslogs aus (Mac: fehlgeschlagene Sudo-Authentifizierungen, SSH-Brute-Force-Versuche, Gatekeeper-Blockaden, XProtect-Erkennungen usw. / Linux: fehlgeschlagene Sudo-Authentifizierungen, SSH-Brute-Force, Firewall-Blockaden, AppArmor-Ablehnungen, ClamAV-Erkennungen usw.), maskiert automatisch sensible Daten wie API-Schlüssel und Tokens und liefert zusätzlich Ergebnisse der Log-Template-basierten Erkennung neuer Muster sowie der Häufigkeitsanomalie-Erkennung (statistische Spitzen). |
get_app_help(query, topic) | Durchsucht die vollständige offizielle RoamSwitch-Wissensdatenbank zu allen Funktionen, Warnmeldungen, Einstellungen und Problembehebungen direkt auf dem Mac und liefert präzise Anweisungen. |
quarantine_status() | Liefert den Inhalt des Malware-Quarantäne-Tresors: ursprünglicher Pfad, erkannter Bedrohungsname, Zeitpunkt und Größe. |
canary_status() | Liefert den Zustand der Ransomware-Köderdateien (Canary) sowie bis zu die 50 jüngsten erkannten Vorfälle. |
package_cve_scan() | Gleicht installierte Pakete (Mac: Homebrew / Linux: dpkg, dnf, zypper, pacman) mit einer lokalen CVE-Zuordnung ab. Es findet überhaupt keine Netzwerkkommunikation statt. |
package_cve_scan_languages(watched_folders) | Gleicht Abhängigkeits-Lockfiles für npm, PyPI, crates.io, RubyGems, Packagist, Go und Maven mit derselben lokalen CVE-Zuordnung ab. Es findet überhaupt keine Netzwerkkommunikation statt. |
verify_fim() | Berechnet die Hashes von rund 150 kritischen Systemdateien neu und vergleicht sie mit der gespeicherten Baseline. |
get_port_anomaly_incidents() | Liefert den Baseline-Zustand des Port-Anomalie-Schutzes, aktuell automatisch blockierte Ports und bis zu die 50 jüngsten Vorfälle. Die Antwort weist ausdrücklich darauf hin, dass die aktuell blockierten Ports eine zeitstempellose Momentaufnahme sind, die sich von der zeitgestempelten Vorfallshistorie unterscheidet. |
get_ebpf_incidents() | Liefert den aktuellen Isolationsstatus des eBPF-Runtime-Guards und die Vorfallshistorie dahinter. |
Die Felder aller Rückgabetypen sind als reine Rust-Deklarationen in der README auf GitHub dokumentiert.
So lässt es sich einbinden
Die folgenden Beispiele verwenden Swift (macOS). roamswitch-linux-kit (Linux) bietet dieselben Methoden (in snake_case) für das gleiche Ergebnis.
Sync- & Backup-Apps
Pausiert die Hintergrundsynchronisierung automatisch bei Verbindung mit einem nicht vertrauenswürdigen Netzwerk.
let status = try await client.guardStatus()
if !status.isCurrentNetworkTrusted {
syncEngine.pauseBackgroundSync()
}
Passwort-Manager
Verkürzt die automatische Sperrzeit in nicht vertrauenswürdigen Netzwerken und passt das Verhalten an die aktive Schutzstufe an.
let status = try await client.guardStatus() let lockTimeout: TimeInterval = status.isCurrentNetworkTrusted ? 300 : 30 vault.setAutoLockTimeout(lockTimeout)
Entwicklertools & Automatisierung
Warnt, wenn ein Entwicklungsserver beginnt, auf 0.0.0.0 zu lauschen, oder erstellt Shortcuts-artige Workflows, die auf das Netzwerkvertrauen reagieren.
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)")
}
Links in E-Mail- & Chat-Apps vorab prüfen
Scannt Links in eingehenden Nachrichten automatisch, bevor sie angezeigt werden, und warnt nur bei gefährlichen.
let result = try await client.auditURLSafety(url: link)
if result.riskLevel == "dangerous" || result.riskLevel == "suspicious" {
showWarningBanner(for: link, score: result.score)
}
Sicherheitsprüfung per Rechtsklick-Menü & Kurzbefehle
In das Dienste-Menü im Finder oder in macOS Kurzbefehle einbinden, um eine kopierte URL mit einer Aktion zu prüfen.
// Aufgerufen aus einem macOS Shortcuts (App Intent)- oder Dienste-Menü-Handler
let report = try await client.auditURLSafety(url: pasteboardURL)
return "\(report.riskLevel.uppercased()) (\(report.score)/100)"
IT-Asset-Management & MDM-Dashboards
Sammelt Scores von allen Macs im Unternehmen und zeigt sie als Liste mit Warnungen in einem Admin-Dashboard an.
let report = try await client.securityReport() try await mdmAPI.reportScore(deviceID: deviceID, score: report.score, grade: report.grade)
Über die SDKs
Q. Ist es kostenlos nutzbar?
A. Ja. Sowohl RoamSwitchKit (macOS) als auch roamswitch-linux-kit (Linux) werden kostenlos unter der MIT-Lizenz veröffentlicht. Beide setzen voraus, dass RoamSwitch selbst (die Diagnose-Engine) installiert ist, aber die SDKs selbst kosten nichts.
Q. Kann es die Einstellungen eines Nutzers ändern?
A. Nein. Es ist schreibgeschützt — es gibt keine implementierte API zum Umschalten der Sperre, Isolieren von Ports oder Ähnliches. Eine App, die dieses Paket einbindet, kann RoamSwitchs Schutzeinstellungen nicht ohne Zustimmung des Nutzers ändern.
Q. Was passiert, wenn RoamSwitch nicht installiert ist?
A. Der entsprechende Fehler wird zurückgegeben (macOS: RoamSwitchClientError.appNotInstalled / Linux: RoamSwitchClientError::AppNotInstalled). Wir empfehlen, dies elegant zu behandeln — z. B. die Funktion auszublenden — statt es als fatalen Fehler zu behandeln.
Q. Was, wenn ich RoamSwitch selbst mit meinem Produkt bündeln und weitervertreiben möchte?
A. Die SDK-Integration (Inhalt dieser Seite) bleibt frei nutzbar. Für das Bündeln und den Weitervertrieb von RoamSwitch selbst ist eine OEM-Lizenz erforderlich — hier zu OEM- & Partner-Bundling Kontakt aufnehmen.