Skip to main content

WiFi Profile Inspector

A Windows CLI tool for inspecting WiFi profiles already saved on the local machine — authentication type, cipher, connection mode, and (only when explicitly requested) the stored key — presented through a Rich-powered terminal dashboard.

Built as a defensive-security / SOC-analyst portfolio project: clean architecture, full type hints, unit tests, and a strict local-only, opt-in-only design.

Python Platform License

Disclaimer

This tool only reads WiFi profile data that Windows already stores locally for the current user — the same data exposed by Windows' own network settings UI and by running netsh wlan show profile directly. It does not:

  • connect to any network,
  • target or scan remote hosts,
  • escalate privilege,
  • persist itself, evade detection, or exfiltrate data,
  • or reveal any key without an explicit --reveal-keys flag.

It is intended for personal use on machines you own or are authorized to administer, and for educational purposes (understanding how Windows stores WiFi profile data and how to build a clean CLI tool around it).

Features

  • List every saved WiFi profile in a Rich table (SSID, authentication, cipher, connection mode, key presence, security level).
  • Show full detail for a single profile, with keys hidden unless --reveal-keys is passed.
  • Export all profiles to JSON, CSV, or TXT.
  • Report view: profile table plus an aggregate security summary (open networks, weak/legacy authentication, stored-key count).
  • Security classification (open / weak / strong / unknown) computed per profile.
  • Structured logging, optional --log-file output.
  • Fully unit-tested parsing and export logic.

Screenshots

Add terminal screenshots here before publishing — e.g. docs/screenshots/list-view.png, docs/screenshots/report-view.png

Architecture

See docs/architecture.md for the full layer breakdown. Summary:

wifi-profile-inspector/
├── src/wifi_profile_inspector/
│   ├── cli.py          # CLI entry point (installed as the `wifi-inspector` command)
│   ├── core/            # netsh execution, parsing, reports, export, logging
│   ├── models/          # WifiProfile dataclass, SecurityLevel enum
│   ├── ui/              # Rich banner, tables, panels, dashboard composition
│   └── utils/           # environment helpers, validators, status-tag colors
├── tests/               # unit tests (no Windows/netsh required)
└── reports/             # default export output directory

Installation

Requires Windows and Python 3.9+.

Install directly from PyPI — no cloning or cd-ing into the project folder required:

pip install wifi-profile-inspector

This installs the wifi-inspector command onto your PATH, so it can be run from any directory.

For local development instead

If you're working on the source itself rather than just using the tool, clone the repo and install it in editable mode:

git clone https://github.com/<your-username>/wifi-profile-inspector.git
cd wifi-profile-inspector
pip install -e .

Usage

Once installed, use the wifi-inspector command from anywhere:

# List all saved profiles
wifi-inspector list

# Show one profile (keys hidden by default)
wifi-inspector show "Home-WiFi"

# Show one profile with the stored key revealed
wifi-inspector show "Home-WiFi" --reveal-keys

# Export every profile to JSON (keys omitted by default)
wifi-inspector export --format json --output reports/profiles.json

# Export including revealed keys
wifi-inspector export --format csv --output reports/profiles.csv --reveal-keys

# Full dashboard + security summary
wifi-inspector report

# Verbose logging, persisted to a file
wifi-inspector list --verbose --log-file logs/run.log

Example output

$ wifi-inspector list

 _       ___ _______    ____             _____ __
| |     / (_) ____(_)  / __ \_________  / __(_) /__
| | /| / / / /_  / /  / /_/ / ___/ __ \/ /_/ / / _ \
| |/ |/ / / __/ / /  / ____/ /  / /_/ / __/ / /  __/
|__/|__/_/_/   /_/  /_/   /_/   \____/_/ /_/_/\___/

v1.0.0 — Windows WiFi Profile Inspection Tool

╭───────── Session Information ──────────╮
│           User:  ammar                 │
│             OS:  Windows-11-10.0.22631  │
│         Python:  3.12.3                 │
│      Timestamp:  2026-08-06 02:30:00    │
│ Profiles found:  3                      │
╰──────────────────────────────────────────╯
────────────────────────────────────────────────────────────
                    Saved WiFi Profiles
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ SSID      ┃ Authentication┃ Cipher ┃ Key Stored ┃ Security ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Home-WiFi │ WPA2-Personal │ CCMP   │ Yes        │ STRONG   │
│ CafeGuest │ Open          │ None   │ No         │ OPEN     │
└───────────┴───────────────┴────────┴────────────┴──────────┘

Export examples

JSON (--format json):

{
  "generated_at": "2026-08-06T02:30:00+00:00",
  "profile_count": 1,
  "profiles": [
    {
      "ssid": "Home-WiFi",
      "authentication": "WPA2-Personal",
      "cipher": "CCMP",
      "connection_mode": "Connect automatically",
      "key_present": true,
      "security_level": "strong"
    }
  ]
}

CSV (--format csv): one row per profile, columns matching the JSON keys above.

TXT (--format txt): a human-readable block per profile, suitable for pasting into a report.

Running tests

git clone https://github.com/<your-username>/wifi-profile-inspector.git
cd wifi-profile-inspector
pip install -e .[dev]
python -m pytest tests/ -v

Tests exercise core/parser.py and core/exporter.py against fixed sample text and temporary files — no Windows machine or real netsh call is required, so they run in CI on any OS.

Project structure

wifi-profile-inspector/
├── pyproject.toml
├── README.md
├── LICENSE
├── CHANGELOG.md
├── CONTRIBUTING.md
├── .gitignore
├── src/
│   └── wifi_profile_inspector/
│       ├── __init__.py
│       ├── cli.py             # entry point, installed as `wifi-inspector`
│       ├── core/
│       │   ├── wifi_manager.py       # sole owner of subprocess/netsh calls
│       │   ├── parser.py              # raw netsh text → WifiProfile
│       │   ├── report_generator.py    # aggregate security statistics
│       │   ├── exporter.py            # JSON / CSV / TXT export
│       │   └── logger.py              # logging configuration
│       ├── models/
│       │   └── wifi_profile.py        # WifiProfile dataclass, SecurityLevel enum
│       ├── ui/
│       │   ├── banner.py
│       │   ├── dashboard.py
│       │   ├── panels.py
│       │   ├── tables.py
│       │   ├── progress.py
│       │   └── theme.py
│       └── utils/
│           ├── helpers.py
│           ├── validators.py
│           └── colors.py
├── reports/
├── tests/
│   ├── test_parser.py
│   └── test_export.py
└── docs/
    ├── architecture.md
    └── screenshots/

Publishing to PyPI

The project is already set up as an installable package (pyproject.toml, src/ layout, wifi-inspector console script). To publish a new version:

pip install build twine
python -m build                        # creates dist/*.whl and dist/*.tar.gz
twine upload --repository testpypi dist/*   # optional: try it on TestPyPI first
twine upload dist/*                     # publish to the real PyPI

You'll need a PyPI account and an API token (create one under Account settings → API tokens, then use __token__ as the username and the token as the password when twine prompts). Bump the version field in pyproject.toml before every new upload — PyPI does not allow re-uploading the same version number.

Future improvements

  • Search and sort flags for the list command (by SSID, security level, authentication type).
  • A diff command comparing two exported reports over time.
  • Packaging as a standalone .exe via PyInstaller for non-technical users.
  • Optional integration with a SIEM/log-forwarding pipeline for periodic WiFi posture snapshots.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wifi_profile_inspector-1.0.0.tar.gz (33.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wifi_profile_inspector-1.0.0-py3-none-any.whl (36.6 kB view details)

Uploaded Python 3

File details

Details for the file wifi_profile_inspector-1.0.0.tar.gz.

File metadata

  • Download URL: wifi_profile_inspector-1.0.0.tar.gz
  • Upload date:
  • Size: 33.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.7

File hashes

Hashes for wifi_profile_inspector-1.0.0.tar.gz
Algorithm Hash digest
SHA256 745dd99da227dd756f422b218547ff5487db0075559561cd0c88a46e12b993ce
MD5 7c41a70f6322b24c1205c41af160f0b6
BLAKE2b-256 cb75c0c783e19a8219715cb04540b96c6daa568f86d402d8caeeff6750cceea9

See more details on using hashes here.

File details

Details for the file wifi_profile_inspector-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for wifi_profile_inspector-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6c560c48ad55cdcd865805385b7073c473793ad7d65f92f36b7fdbe3e7390c50
MD5 4e867f5cf54934bbe8708ae39c8ae0d4
BLAKE2b-256 ae311e6d671d063ae3d30585e8a7b086d94dbd0c31a7ca619ef02a21f7e0f1db

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page