Test network reachability across VLANs in real time. Ships as a portable Windows 11 desktop app with a live colour-coded matrix, and as a Linux CLI edition for any Linux system including Raspberry Pi.
If this app is useful to you, a coffee is always appreciated ❤

Monitor tab — live reachability matrix and current sweep status
| Light theme | Dark theme |
|---|---|
![]() |
![]() |
Config tab — VLAN definitions, NIC selection, and ping settings
| Light theme | Dark theme |
|---|---|
![]() |
![]() |
- Live reachability matrix — colour-coded grid showing reachability between all configured VLANs
- Matrix cell tooltips — hover any cell to see last RTT, success rate, and min/avg/max over the last 20 pings
- Per-sweep status table — shows current sweep results with RTT, target IP, and device label
- NIC selection — bind all testing to a specific network adapter
- IP renewal — release and renew DHCP on the selected adapter without leaving the app
- Persistent results — matrix retains history across sweeps with a manual clear button
- Branded PDF reports — export a professionally formatted report with summary, VLAN definitions, colour-coded matrix, and detailed per-pair results
- Config import/export — save and share VLAN configurations between machines as JSON
- Light / Dark / System themes — picks up your Windows mode at launch, with a matching native Win11 title bar
- Window state remembered — size and position persist across sessions
- Fully portable — single
.exe, no Python installation needed
Windows — two options:
- Install from the Microsoft Store — recommended, gets automatic updates
- Grab the latest
.exefrom GitHub Releases — fully portable, no installation
Linux — clone the repo or download the Linux CLI/ folder. See the Linux CLI Version section below.
Double-click VLAN Tester.exe — no installation needed. On first run a vlan_config.json file is created to store your configuration (next to the exe when run standalone, or in %LOCALAPPDATA%\VLANReachabilityTester\ when installed from the Microsoft Store).
Click the Config tab.
Under VLAN Definitions, click + Add to add each VLAN:
| Field | Description | Example |
|---|---|---|
| VLAN Name | Short identifier | TRUSTED |
| Subnet | Network address (/24) | 10.10.20.0 |
| Target IP | Device to ping on that VLAN | 10.10.20.1 |
| Device Label | Friendly name for the target | Core Switch |
Repeat for each VLAN you want to test. Use the ↑ / ↓ buttons to reorder.
Under Network Interface, click the adapter you want to use for testing. The selected adapter is highlighted in green. Click ↺ Refresh if your adapter is not listed.
| Setting | Description | Default |
|---|---|---|
| Sweep interval | Seconds between full sweeps | 5 |
| Ping timeout | Seconds to wait per ping | 2 |
| Pings per host | Number of pings sent per target | 1 |
Click ✔ Apply & Restart Sweep in the tab bar. The app switches to the Monitor tab and begins sweeping.
The Config tab also includes ⬇ IMPORT and ⬆ EXPORT buttons next to Apply:
- ⬆ EXPORT — saves the full configuration (VLANs, ping settings, selected NIC) to a JSON file you choose
- ⬇ IMPORT — loads a previously saved JSON file, confirms before replacing existing VLANs, and applies the new config automatically
Useful for moving configurations between machines or keeping a backup before major changes.
Shows your current VLAN, IP address, selected NIC, and sweep count — updated every second even while paused.
Live results for the current sweep:
| Status | Meaning |
|---|---|
REACH |
Target is reachable |
BLOCK |
Target did not respond |
THIS SUBNET |
This is the VLAN your adapter is currently on |
??? |
Not yet tested this sweep |
Persistent grid showing historical results for every source→destination VLAN pair. Results are retained across sweeps until you click 🗑 CLEAR MATRIX.
| Colour | Meaning |
|---|---|
| Green | Reachable |
| Red | Blocked |
| Grey | Not yet tested |
| Button | Action |
|---|---|
| ⏸ RUNNING / ▶ RESUME | Green when actively sweeping, yellow when paused — click to toggle |
| 🔄 RENEW IP | Pauses sweep, runs ipconfig release/renew on selected adapter, waits for new IP |
| 💾 REPORT | Opens a Save As dialog and generates a branded PDF report of the current results |
| 🗑 CLEAR MATRIX | Clears the reachability matrix and resets sweep count |
The 💾 REPORT button generates a professionally formatted PDF containing:
- Branded header with the app logo and generation timestamp
- Summary panel — current source VLAN, local IP, and sweep statistics
- VLAN definitions — full list of every configured VLAN with subnet, target, and device label
- Reachability matrix — colour-coded grid with RTT values in reachable cells
- Detailed results table — every source→destination pair with status, RTT, and last-tested timestamp
- Footer on every page with brand, timestamp, and page number
Ideal for network documentation, change records, or sharing test results with colleagues.
When you physically move your network connection to a different VLAN (cable change, different Wi-Fi SSID, or switch port reconfiguration):
- Click 🔄 RENEW IP — the app pauses the sweep, releases and renews the DHCP lease on your selected adapter, and waits for the new IP
- Once the new IP appears the status bar updates automatically
- Click ▶ RESUME to continue sweeping from the new VLAN
Subnets are entered as a /24 network address:
| Accepted | Example |
|---|---|
10.10.20.0 |
/24 network |
192.168.10.0 |
/24 network |
CIDR notation (/24) is not required — the app treats the first three octets as the VLAN prefix and ignores the last octet.
Settings are saved automatically to vlan_config.json:
- Standalone
.exe— in the same folder as the exe - Microsoft Store install — in
%LOCALAPPDATA%\VLANReachabilityTester\(the install location underWindowsAppsis read-only, so user settings are stored in your profile)
Use the in-app ⬆ EXPORT / ⬇ IMPORT buttons to move configurations between machines without touching the filesystem.
Requires Python 3.10+ and the following packages:
pip install pyinstaller reportlab pillowThen either run the full build pipeline (exe + MSIX for Store submission):
powershell -ExecutionPolicy Bypass -File build.ps1 -Version 1.2.0.0Or build just the exe:
pyinstaller --onefile --windowed --name "VLANReachabilityTester" Windows/vlan_tester_gui.pyThe compiled exe will be in the dist/ folder.
A terminal-based version for any Linux system (Raspberry Pi, Ubuntu, Debian, Fedora, Arch, Raspberry Pi OS, etc.) is included at Linux CLI/vlan_tester_cli.py.
sudo python3 "Linux CLI/vlan_tester_cli.py"On the first run an interactive setup wizard walks you through adding your VLANs. Configuration is saved to vlan_config.json alongside the script.
| Key | Action |
|---|---|
SPACE |
Pause / resume the sweep |
c |
Open the in-app config menu (add / remove / edit VLANs, change ping settings) |
Ctrl+C |
Quit |
sudo python3 "Linux CLI/vlan_tester_cli.py" --setupThe CLI uses standard POSIX modules and is validated on Ubuntu, Debian, Raspberry Pi OS, Fedora, and Arch. It detects system capabilities at startup and fails with clear guidance if something is missing:
pingnot found or lacks-c/-Wflags (BusyBox/Alpine) — tells you to installiputils-ping- No permission to send ICMP — suggests
sudoorsetcap cap_net_raw+ep $(which ping) - Non-interactive shell (piped, container, cron) — disables keyboard controls, keeps running with Ctrl+C to stop
- Local IP detection cascades through
netifaces,hostname -I,ip,ifconfig, andsocket— works even on minimal systems
An example config showing the schema is provided in Linux CLI/vlan_config.example.json.
To run the exe:
- Windows 10 or 11 (64-bit)
- No Python installation needed
To run from source:
- Python 3.10+
reportlab(PDF report generation)- tkinter is included with Python
This app is free and open source. If it's saved you some time or helped you debug a tricky VLAN issue, consider buying me a coffee — it keeps the updates coming!
GNU General Public License v3.0 — free to use, modify, and distribute, but any derivative works must also be open source under the same licence. Commercial resale is not permitted.




