
Unified network toolkit for Linux — Python 3 + PySide6
A unified network toolkit for Linux and macOS — inspect, connect, diagnose.
NMLinux is a single, unified GUI that brings together 29 network modules in one window: interface monitoring, Wi-Fi, DNS, SSH terminal, firewall viewer, topology map, traceroute, and more. Built from scratch in Python and PySide6 (Qt 6), with 8 interface languages and no external dependencies beyond standard system tools.
[!NOTE] NMLinux is not related to the Linux system daemon
/usr/bin/NetworkManager(NetworkManager by Red Hat/GNOME). NMLinux is a standalone project built from scratch in Python and PySide6.
Built with Claude Code (Anthropic) and the contribution of its author.
NMLinux is built with AI assistance — Claude Code, specifically — and that's not hidden anywhere in this repo. Almost every serious software project today uses AI somewhere in its pipeline, whether it says so or not. So "was AI involved" isn't the interesting question. The interesting question is: does anything catch it when the AI gets something wrong?
Here's what does, if you'd rather check than take my word for it:
pytest tests/ -v. Pure logic plus a handful of real Qt widget tests (menus, tables), no mocking away the interesting parts.docs/Decisions-Techniques.md — every non-obvious technical call, the alternatives that got rejected, and the bugs (including AI-introduced ones) that were found and fixed, with the reasoning written down.docs/Architecture.md and docs/Carte-des-Modules.md — the actual structure of the code, kept in sync with what ships.None of that exists because AI can't be trusted. It exists because nothing should ship without a process that checks it — hand-written code included. Judge the output and how it's verified, not the tool that helped write it.
Found a bug anyway? That's useful, not embarrassing — open an issue.
GitHub Discussions are open — share feedback, report ideas, ask questions, or just say hello. The author has 30+ years in infrastructure and operations, and built this tool because good, free, and simple software should exist for Linux too.
Linux screenshots from v1.2.7 — macOS screenshots from v1.3.5. The app now has 29 modules and 8 interface languages (FR/EN/ES/DE/IT/PT/JA/ZH).
Linux (KDE)
| Dashboard | Topology |
|---|---|
![]() | ![]() |
| Traceroute | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| Dashboard | Traceroute |
|---|---|
![]() | ![]() |
traceroute always resolved on PATH via the host shim even when the host had no real traceroute binary installed, so the worker never fell back to tracepath and the trace finished instantly with no hops and no error shown. It now falls back to tracepath whenever traceroute produces no parseable output at all, regardless of why it failed.DISPLAY/WAYLAND_DISPLAY are set (any GUI session) and ssh doesn't have a clean tty, it can try $SSH_ASKPASS for the password prompt instead of the embedded terminal — silently failing auth if no askpass helper is installed. SSH_ASKPASS_REQUIRE=never now forces password prompts to always go through the terminal itself.flatpak-spawn --host can never become the controlling-terminal owner of the forwarded pty ( refused with — a different, unrelated session already owns it; this is an intentional kernel security boundary, not a bug). The only working around (, allocating a fresh pty) fixes the password prompt but breaks live terminal-resize propagation for that session — judged a worse trade-off than not shipping Flatpak at all. AUR and the AppImage are the supported Linux install paths going forward.packaging/flatpak/ targets KDE Linux and other Flatpak-only distros. Host CLI tools nmlinux shells out to (nmcli, pkexec, mount.cifs, ssh, nmap, …) are bridged via flatpak-spawn --host shims on PATH instead of sandboxing each one individually; PySide6 comes from Flathub's io.qt.PySide.BaseApp rather than the PyPI wheel. Not published on Flathub — a single .flatpak bundle is built with packaging/flatpak/build-bundle.sh and attached to each release instead, the same way the AppImage already is. Discontinued in v1.7.12 — see above.Ctrl+Shift+C or the right-click menu; paste with Ctrl+Shift+V (existing). Copying was previously impossible — no text selection existed at alliperf3 tests against either a bundled public server list (26 countries) or a saved custom server (e.g. an internal org server). Supports TCP/UDP, IPv4/IPv6/auto, and reverse (download) direction, with jitter/loss shown for UDP tests. Suggested by issue #6iperf3 — install to enable the LAN tab; the tab shows a banner and stays disabled otherwise~/mnt/<host>_<share>), usable from the terminal and any other app — not a transient browse view. Session-only (no fstab/systemd persistence), credentials reused from the existing user/password fields. Linux uses pkexec mount -t cifs with a restricted-permission credentials file (never exposed via ps); macOS uses mount_smbfs directly. Automatically retries with an older SMB dialect (vers=2.0) when a server rejects the default negotiation (common with older NAS units) — both attempts happen under a single authentication prompt via a dedicated helper processcifs-utils (Linux) for SMB mounting; built into macOSbootstrap_macos.sh no longer forces NONINTERACTIVE=1 on the Homebrew installer, which aborted immediately on any fresh admin account instead of prompting for the sudo password; the documented one-liner now downloads the script first instead of piping it directly into bash, since nested interactive steps (Xcode CLT installer, Homebrew's own sudo prompt) could interfere with the outer script's own input stream when pipedSmbNfsPage was the only target page missing from the inter-module right-click system shipped in v1.7.0; right-clicking a host and choosing SMB now prefills the host field and launches the scan immediately, bold in the menu when port 445 is detected opensystem_profiler (returns <redacted> without Location Services) to CoreWLAN as primary data source; app now requests Location Services permission at first launch; Wi-Fi page shows all networks with real names once grantedsystem_profiler for security modeset_target + auto-query), DNS (set_target prefill only), Ping (set_target + auto-start), Traceroute (set_target + auto-start), MTR (set_target + auto-start), Port Scanner (set_target + focus), SSH / RDP / VNC (set_target opens new-connection form prefilled), Topology (load_hosts injects nodes from IP Scanner/Nmap scan without re-scanning — gateway detected automatically, edges drawn, origin node highlighted in red), Asset Inventory (prefill_hosts starts credential scan directly on discovered hosts, skips ICMP discovery phase)exec() into Python, NSBundle.mainBundle() resolves to the Python.framework bundle (CFBundleName = "Python") that Qt reads during QApplication construction; fixed by patching the bundle's infoDictionary() and renaming native menu items via AppKit before the application menu is createdNSProcessInfo.setProcessName_ via pyobjc-framework-Cocoa (superseded by v1.6.4)install_macos_app.sh so macOS correctly associates the .app bundle with the running process; added setprogname and sys.argv[0] override as fallbacks|; full fallback chain without admin rights: OS via ver, CPU via registry, RAM via systeminfo, disk via wmic → fsutil (locale-aware EN comma / FR space) → dir /-C/System/Volumes/Data), Apple Silicon CPU fallback (hw.model), Synology (/volume1), Unraid (/mnt/user)sshpass, nmap and snmpget installed via Homebrew are now found and called using their absolute path; .app bundles on macOS do not inherit the Homebrew PATH (/opt/homebrew/bin, /usr/local/bin), so previously installed tools were silently ignoredgit pull && bash packaging/install_macos_app.sh from the repo root is now the documented upgrade method; the script manages its own venv (~/.local/share/nmlinux/venv) and requires no system-level pip or pipxfree -h replaced with BusyBox-compatible free; macOS code path now uses sw_vers for OS name, hw.model fallback for Apple Silicon CPU, /System/Volumes/Data for the APFS user-data volume; Synology/Unraid volumes (/volume1, /mnt/user) detected before root; df | tail -1 || … false-success pattern fixed with test -d guards; lsb_release output stripped of surrounding quotes; multiple SSH/WinRM credential sets supported (tries each in order per host)tftpyssl.SSLError subclasses; entries now show "… (checking)" while the background check runs and "— (unreachable)" when the host cannot be reached+ Watch (uses current host/port) or manually in the panel; background check runs automatically 2 seconds after launch; sidebar "TLS Inspector" entry shows a colored dot: red if any cert is expired, orange if any cert expires within 30 days; re-check button in the panel; list shows status per entry (✓ / ⚠ / EXPIRED) with color coding_arp_entry() now calls arp -n <ip> on macOS and parses its output format (? (IP) at AA:BB:CC on en0) instead of reading /proc/net/arp (Linux-only); all four scanner columns now populate correctly on macOSgetent (Linux-only) with Python's socket.gethostbyaddr() for cross-platform reverse DNS resolution; hostname lookup now works natively on macOS without any extra toolsmbclient (requires Homebrew samba) to smbutil view (built-in macOS tool); SMB share listing now works on macOS without any installshowmount is built-in on macOS but doesn't support --no-headers; flag removed on macOS, header line skipped in parser; NFS export listing now works nativelyxfreerdp is not found, falls back to open rdp:// URL scheme; opens Microsoft Remote Desktop (App Store) if installed, with host, port, username and domain pre-filledvncviewer is not found, falls back to open vnc:// URL scheme; opens macOS Screen Sharing (built-in, zero install required)-A to the ssh command; allows jumping between servers without copying your private key (PC → A → B); requires an active SSH agent (SSH_AUTH_SOCK); contextual help updated in all 8 languagespip install reportlab)printer, server, smartphone, cpu, laptop)avahi-browse (optional, runs in parallel with nmap scan); identifies printers (_ipp._tcp, PDL Printer), Android phones and TVs (_googlecast._tcp, _androidtvremote2._tcp), Apple Macs (am=Mac16,x model in AirPlay TXT), NAS devices (Synology reports model=Xserve), KDE Connect desktops; falls back to MAC vendor OUI and hostname heuristics when avahi is unavailable_IS_MACOS) and branches to native macOS commands: route -n get default, ifconfig, scutil --dns, networksetup, system_profiler SPAirPortDataType, pfctl, netstat -ib; privilege escalation uses osascript + with administrator privileges instead of pkexec; monospace font uses Menlo instead of Monospace? badge panel (description, usage examples and equivalent CLI commands) now covers all 8 languages for every module; previously JA and ZH fell back to Englishnav_hint_smb_nfs and nav_hint_hosts keys added to all 7 non-French language blocks~/.ssh/ (file, type, bits, comment, SHA256 fingerprint); generate Ed25519 or RSA 4096 keys with optional passphrase (mismatch detection, auto-filename by type); copy public key to clipboard; deploy to a remote server via ssh-copy-id in an inline terminal with stdin support for password prompts; delete key pairs with confirmation; auto-creates ~/.ssh/ if missing; i18n: fr / en / es / deopenssl s_client); works for valid, expired and self-signed certs; friendly error messages for unreachable hostssmbclient -L with optional credentials, shows share name / type / comment; NFS tab: showmount -e, shows export path and access list; detects missing tools with distro-specific install instructions/etc/hosts; table with enable/disable toggle, add/edit/delete entries via dialog; filter by IP or hostname; saves via pkexec cp (polkit authentication dialog)~/.local/share/nmlinux/venv, installs system deps via apt, creates launcher and .desktop entry (fixes PEP 668 externally-managed-environment error)vncviewer (TigerVNC); compatible with macOS ARD (DH30 auth handled natively by vncviewer); password never stored; detects missing vncviewer with distro-specific install instructionsxfreerdp as an external process; password prompted at connect time, never stored; fields: host, port, username, domain, resolution, fullscreen; detects missing xfreerdp with distro-specific install instructions (Arch / Debian / Fedora)assets/icons/; rendered at runtime via QSvgRenderer; coloured #60a5fa; app no longer requires any system icon theme (Breeze, Adwaita, Papirus…)main.py now auto-detects the GTK icon theme via gsettings and applies it to Qt; extended fallback chains for Wi-Fi, Traceroute, Speed Test, Interfaces, Port Scanner, Firewall, MTR; themed_icon() now validates that a real pixmap exists before accepting a theme iconqt6.qtsvg to QT_PLUGIN_PATH so Qt can render SVG icons; themed_icon() tries sizes 22/24/16/32/48 (Breeze uses 22 px, not 24); theme forced to breeze when the Nix-bundled icon set is detected; also checks /etc/xdg/kdeglobals for system-wide KDE configmtr --report, parses text output, displays a live table with Loss %, RTT Last/Avg/Best/Worst/Jitter per hop, colour-coded by loss severity; continuous mode; CSV + TXT exportcurl + Cloudflare (speed.cloudflare.com): download (25 MB), upload (10 MB), ping to 1.1.1.1; up to 5 runs persisted in JSON; historical line graph (Download/Upload)/etc/nftables.conf and /etc/iptables/*.rules without root; live ruleset via pkexec nft list ruleset; columns: Table / Chain / Rule / Port / Action / Comment; colour-coded actions; live filter? badge; hovering displays a tooltip describing what the module does; vertical separator added between sidebar and content areacore/theme.py with is_dark(), color_ok(), color_err(); custom painter widgets (_Graph, _MapWidget) read palette at paint time; all hardcoded Catppuccin Mocha colours replaced with semantic Qt palette roles255.255.255.0) derived from CIDR prefixtraceroute / tracepath fallback)getent/avahi/nmblookup; MAC address, vendor (IEEE OUI 39K entries), interface columns; CSV/TXT export updatedInitial public release — 13 modules: Dashboard, Interfaces, Wi-Fi, Subnet Calculator, DNS Lookup, Ping Monitor, IP Scanner, Port Scanner, Nmap, Whois, SNMP, SNTP/NTP, SSH.
Linux — most are already present on a standard install:
# Arch / EndeavourOS
sudo pacman -S iproute2 networkmanager bind-tools nmap whois net-snmp iputils mtr curl
# Debian / Ubuntu
sudo apt install iproute2 network-manager dnsutils nmap whois snmp mtr-tiny curl
# Fedora
sudo dnf install iproute NetworkManager bind-utils nmap whois net-snmp-utils mtr curl
macOS — install via Homebrew:
# Required
brew install nmap mtr curl
# Optional — enable additional modules
brew install whois # WHOIS page
brew install net-snmp # SNMP page (snmpwalk / snmpget)
brew install samba # SMB scan with credentials (smbclient)
macOS ships
ping,dig,traceroute,netstat,ifconfig,smbutilandroutenatively.networksetupandscutilare built-in macOS tools, no install needed. OUI vendor lookup in IP Scanner needs no install either — the Wiresharkmanufdatabase is downloaded automatically in the background on first use and cached locally.
pip install pyte or sudo pacman -S python-pyte)pip install tftpy or sudo pacman -S python-tftpy) — File Transfer moduleyay -S nmlinux
All dependencies (PySide6, ptyprocess, pyte, nmcli, …) are handled automatically.
Run directly with the bundled flake.nix — no system-wide install needed:
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
nix run .
Or enter a development shell:
nix develop
python3 -m nmlinux.main
All Python dependencies (PySide6, ptyprocess, pyte, tftpy) and system tools (nmcli, nmap, freerdp, vncviewer, mtr, avahi-browse…) are provided automatically via the Nix wrapper.
Download NMLinux-x.y.z-x86_64.AppImage from the latest release:
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage
No installation required — Python, Qt and all NMLinux modules are bundled in a single file.
Works on any x86_64 Linux with glibc 2.17+ (Ubuntu 16.04+, Fedora 26+, Arch, Mint, etc.).
System network tools (
nmap,whois,mtr…) are not bundled — install them via your package manager for the corresponding modules to work. See Requirements below.
Quickest way — one-liner bootstrap. Works on a completely bare Mac: installs Xcode Command Line Tools, Homebrew, all system tools, then NMLinux itself. Safe to re-run (updates instead of reinstalling):
curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh
Install system-wide (/Applications) instead of ~/Applications:
curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh --system
No Apple Developer account or paid notarization involved — it's the same open-source
install_macos_app.shunder the hood, just fetched and run for you. The script is plain, readable bash; feel free to open/tmp/bootstrap_macos.shand read it before running, or check it directly here:packaging/bootstrap_macos.sh.Download-then-run (rather than piping straight into
bash) is intentional: on a fresh Mac, the script triggers nested interactive steps (Xcode Command Line Tools installer, Homebrew's own installer asking for yoursudopassword) that read from the terminal — piping the script directly intobashcan make those nested prompts interfere with the script's own input stream and stop it partway through. Running from a downloaded file avoids that entirely.
Manual install — if you prefer to run each step yourself, or already have Homebrew:
# 1. Install Homebrew system tools (see Requirements above)
brew install nmap mtr curl
# 2. Clone and install
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash packaging/install_macos_app.sh
To update: git pull && bash packaging/install_macos_app.sh
To uninstall: bash packaging/uninstall_macos.sh
To install system-wide (/Applications): bash packaging/install_macos_app.sh --system
The script installs the following Python packages into the venv automatically:
PySide6, ptyprocess, pyte, tftpypyobjc-framework-Cocoa — macOS menu bar, native dialogspyobjc-framework-CoreWLAN — Wi-Fi SSID scanningpyobjc-framework-CoreLocation — Location Services permission for Wi-Fi namesWi-Fi on macOS 26 (Tahoe): on first launch, macOS will ask for Location Services permission — grant it to display Wi-Fi network names. The permission appears under System Settings › Privacy & Security › Location Services.
Most modules work on macOS without modification. RDP falls back to
open rdp://(Microsoft Remote Desktop), VNC falls back toopen vnc://(Screen Sharing built-in). Connection Manager has reduced functionality on macOS (nmclinot available).
Note for Linux Mint / Ubuntu users:
pip installis blocked system-wide on Python 3.12+ (PEP 668 —externally-managed-environment). Use the provided install script — it creates a virtual environment automatically and installs a.desktopentry.
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash install.sh
The script will:
apt (libgl1, python3-venv, freerdp, tigervnc…)~/.local/share/nmlinux/venv~/.local/bin/nmlinux.desktop entry so NMLinux appears in your application menuAfter install, run nmlinux from a terminal or launch it from the application menu.
Download the .whl from the latest release and install it:
# Arch / Fedora / macOS — no pip restrictions
pip install nmlinux-1.5.3-py3-none-any.whl
# Debian / Ubuntu / Mint — install system libs first, then use pipx
# Ubuntu ≤24.04:
sudo apt install libgl1 libglib2.0-0 libdbus-1-3 freerdp2-x11 tigervnc-viewer
# Ubuntu 26.04+:
sudo apt install libgl1 libglib2.0-0 libdbus-1-3 freerdp3-x11 tigervnc-viewer
pipx install nmlinux-1.5.3-py3-none-any.whl
Note for Ubuntu 26.04+:
pipxrequires system libraries (libGL, etc.) to be installed first — the commands above cover them. Ifpipx installfails due to a PySide6 build error, use Option 4 (install script) instead, which handles everything automatically.
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte tftpy
python3 -m nmlinux.main
Copy the .desktop file to make NMLinux appear in your application launcher:
cp data/nmlinux.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
Then edit the Exec= path in the file if needed.
./nmlinux.sh
# or, after pip install:
nmlinux
# or directly:
python3 -m nmlinux.main
nmlinux/
core/
i18n.py — Translation system (8 languages: fr/en/es/de/it/pt/ja/zh), tr(key) function
icons.py — themed_icon(): 21 bundled Lucide SVG icons via QSvgRenderer
theme.py — is_dark(), color_ok(), color_err(): runtime light/dark helpers
settings.py — AppSettings dataclass, JSON persistence
ssh.py — SshConnection dataclass, SshStore
rdp.py — RdpConnection dataclass, RdpStore, find_xfreerdp()
vnc.py — VncConnection dataclass, VncStore, find_vncviewer()
terminal.py — SshWorker (QThread) + PTY via ptyprocess, emits raw bytes
tls_watchlist.py — TlsWatchlist: background cert expiry checker, JSON persistence
http_server.py — ThreadedHTTPServer: directory listing, GET/PUT/POST, port binding
tftp_helper.py — TftpServerThread: tftpy wrapper, configurable port and root
help_content.py — Module contextual help strings (all 8 languages)
cli_bar.py — CliBar singleton: pedagogical CLI equivalent bar
export_dialog.py — open_export_dialog(): QFileDialog with live extension update
command_palette.py — CommandPalette (Ctrl+P): fuzzy search across 29 modules
export_manager.py — collect_snapshot(), to_json/text/markdown/pdf, save_export()
pages/
about.py — About page (credits, tools & services)
bandwidth.py — Bandwidth Monitor: per-interface 60s graph, live stats
connection_manager.py — Connection Manager: nmcli profiles, connect/disconnect/edit
dashboard.py — Dashboard
dns.py — DNS Lookup
file_transfer.py — File Transfer: TFTP + HTTP server, live log, pkexec for port 69
firewall.py — Firewall Viewer: nftables + iptables parser, live via pkexec
help_page.py — Contextual help overlay
hosts.py — Hosts File: view/edit /etc/hosts, toggle entries, save via pkexec
interfaces.py — Network Interfaces
ip_scanner.py — IP Scanner
mtr.py — MTR: mtr --report parser, live hop stats table, export
nmap_scan.py — Nmap
ping.py — Ping Monitor
port_scanner.py — Port Scanner
rdp.py — Remote Desktop: RDP profiles, launches xfreerdp
settings.py — Settings page
smb_nfs.py — SMB/NFS Browser: smbclient + showmount
snmp.py — SNMP
sntp.py — SNTP / NTP
speedtest.py — Speed Test: curl + Cloudflare, history graph
ssh.py — SSH page (connection manager + terminal)
ssh_keys.py — SSH Key Manager: list/generate/deploy/delete key pairs
subnet.py — Subnet Calculator
terminal_view.py — TerminalView: pyte VT100 emulator + QPainter renderer
tls.py — TLS Inspector + TLS Watchlist: cert details, background expiry monitor
topology.py — Topology Map: nmap -sn, interactive graph, zoom/pan
traceroute.py — Visual Traceroute: world map, geolocation, zoom/pan
vnc.py — VNC: connection profiles, launches vncviewer
whois.py — Whois
wifi.py — Wi-Fi
wol.py — Wake on LAN: magic packet, persistent host book
assets/
icons/ — 21 bundled Lucide SVG icons (#60a5fa)
world.geojson — Natural Earth 110m countries (map background)
window.py — MainWindow (sidebar + QStackedWidget)
main.py — Entry point
Since v1.2.7, NMLinux uses 21 bundled Lucide SVG icons rendered at runtime via QSvgRenderer. The app no longer depends on any system icon theme (Breeze, Adwaita, Papirus…) and displays correctly on KDE, GNOME, XFCE, and others. The Qt style adapts to the running desktop automatically.
Full support — all 29 modules available.
Most modules work out of the box since they rely on tools available on both platforms (ssh, dig, ping, curl, nmap, openssl…).
9 modules required explicit macOS adaptation (dual code paths detecting the platform at startup): Dashboard, Interfaces, Wi-Fi, Topology, Bandwidth, Firewall, Connection Manager, Hosts File, MTR — these use native macOS commands (ifconfig, networksetup, scutil, pfctl, system_profiler…) instead of their Linux equivalents.
Modules with limited or no macOS support:
sudo; on macOS, privilege escalation uses osascript + administrator privilegesSSH_AUTH_SOCK); on macOS this is handled automatically by the system, no manual setup neededIf NMLinux is useful to you, consider supporting its development:
bc1qspe0tky7552qas72wgn8w9dswr0dxlv24w39t6ztjqk3nz6kc5tqv753a4GPL-2.0 — see LICENSE.
This project is an independent reimplementation. No code from NETworkManager was used or translated.
TIOCSCTTYEPERMscript| Module | Description |
|---|
| Dashboard | Local machine info, gateway, public IP, geolocation, DNS resolvers |
| Connection Manager | NetworkManager profiles via nmcli: list, filter, connect/disconnect/edit/delete |
| Interfaces | Network interfaces table with per-interface detail (ip + nmcli) |
| Wi-Fi | Available networks, signal bars, security, connected network highlighted |
| Subnet Calculator | Network/broadcast/host range from CIDR, host table up to 4096 entries |
| DNS Lookup | dig-based lookup for A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY |
| Ping Monitor | Continuous ping to multiple hosts, RTT stats, packet loss % |
| IP Scanner | CIDR/range ping scan, 50 threads, hostname (DNS/mDNS/NetBIOS), MAC address, vendor (OUI), interface, CSV + TXT export |
| Port Scanner | TCP connect scan, 200 threads, service presets, CSV + TXT export |
| Nmap | 7 scan modes, XML output parsing, Host/Port/Protocol/State/Service table, CSV + TXT export |
| Whois | Raw whois output in monospace |
| SNMP | snmpwalk/snmpget, v1/v2c, 10 OID presets, results table |
| SNTP / NTP | Pure Python RFC 4330 UDP client, offset/delay/stratum/reference |
| SSH | Embedded PTY terminal (pyte/VT100), saved connections (JSON), key auth, scrollback |
| Remote Desktop | RDP connection profiles (groups/subgroups); launches xfreerdp; password never stored |
| VNC | VNC connection profiles (groups/subgroups); launches vncviewer (TigerVNC); macOS ARD compatible; password never stored |
| SSH Key Manager | List ~/.ssh/ key pairs (type, bits, fingerprint); generate Ed25519/RSA 4096; copy public key; deploy to server via ssh-copy-id; delete pairs with confirmation |
| TLS Inspector | Certificate details: CN, SANs, issuer, validity + expiry countdown, serial, protocol, cipher, chain; Watchlist with background expiry monitor and sidebar color dot |
| SMB / NFS | List SMB shares (smbclient) and NFS exports (showmount) from any server or NAS; optional credentials for SMB |
| Hosts File | View/edit /etc/hosts: add, delete, toggle entries; filter; save via pkexec |
| Visual Traceroute | Hop-by-hop route on a world map, live geolocation (ip-api.com), zoom & pan, CSV + TXT export |
| MTR | Embedded My Traceroute: loss %, RTT Last/Avg/Best/Worst/Jitter per hop, colour-coded, CSV + TXT export |
| Firewall Viewer | Read-only nftables + iptables/ip6tables ruleset (no root); live via pkexec; filter by table/chain/action |
| Speed Test | Download/upload/ping via Cloudflare; no external tool beyond curl; history graph (last 5 runs) |
| Bandwidth | Real-time per-interface throughput: 60s sliding graph, live speeds, session totals, peak |
| Wake on LAN | Pure Python magic packet (UDP broadcast), persistent host book, no external tool required |
| Topology Map | Auto-discovers LAN devices via nmap -sn; interactive graph with draggable nodes, zoom/pan, detail panel |
| Settings | Language selection (FR / EN / ES / DE / IT / PT / JA / ZH), persisted; restart required after change |
| Command Palette | Ctrl+P overlay: fuzzy search across all 29 modules by name or keyword |
| File Transfer | On-demand TFTP or HTTP server; configurable port and root dir; local IPs as copy buttons; live log table (filename, client IP, direction ↑/↓, size); HTTP directory listing + GET/POST/PUT; TFTP GET + PUT; port 69 prompts pkexec |
| Export | File → Export Network Report (JSON/Markdown/Text/PDF); per-module export on Interfaces, DNS, Firewall, SSH, Connections |
| Tool | Feature | Linux | macOS |
|---|
xfreerdp / xfreerdp3 | Remote Desktop (RDP) | Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11 | optional — falls back to Microsoft Remote Desktop (open rdp://) |
vncviewer | VNC | Arch: tigervnc · Debian: tigervnc-viewer | optional — falls back to macOS Screen Sharing (open vnc://, built-in) |
nm-connection-editor | Edit connections from Connection Manager | Arch: nm-connection-editor | — (System Preferences opens instead) |
traceroute | Traceroute alternative (tracepath used by default) | Arch: traceroute | built-in |
mount.cifs (cifs-utils) | Mount SMB shares from the right-click menu | Arch/Debian: cifs-utils | built-in (mount_smbfs) |
iperf3 | Speed Test — LAN tab | Arch: iperf3 · Debian/Ubuntu: iperf3 | brew install iperf3 |
| Module | Status | Notes |
|---|
| RDP | ✓ macOS | Falls back to open rdp:// → Microsoft Remote Desktop (App Store) |
| VNC | ✓ macOS | Falls back to open vnc:// → Screen Sharing (built-in, zero install) |
| IP Scanner | ✓ macOS | Uses socket.gethostbyaddr() — native Python, no extra tool |
| SMB | ✓ macOS | Uses smbutil view (built-in) instead of smbclient |
| NFS | ✓ macOS | showmount built-in; header parsing adapted |
| Connection Manager | ⚠ Reduced | Edit/delete require nmcli (Linux only); list view works |