Ships as the deauthguard CLI/library — see below.
The original version is a hands-on 802.11 deauthentication-attack lab performed against the team's own router ("PTCL FLASH FIBER," explicitly the group's own equipment used for simulation) using Kali Linux and the Aircrack-ng suite, with both broadcast and targeted attack modes verified in Wireshark.
New addition: deauthguard/ — a real, passive 802.11
deauthentication/disassociation flood detector: the defensive
counterpart the original never had. It analyzes a live monitor-mode
interface or an offline PCAP, correlates disconnect bursts by BSSID and
client using Kismet/Cisco-precedented rate heuristics, and emits
explainable, severity-ranked alerts — turning the same subject matter
(802.11 management frames, monitor mode, the Aircrack-ng ecosystem) from
"how to attack" into "how to detect." See deauthguard/README.md.
Demonstrate, against equipment the team actually owns and controls, how trivially exploitable unauthenticated 802.11 management frames (deauth) are, and evaluate what actually defends against it. (New: and build the detection side of that evaluation as working, tested software rather than a comparison table alone.)
(original)
- Perform broadcast and targeted deauthentication attacks against an owned router.
- Verify disconnects and captured WPA2 handshakes in Wireshark.
- Compare the effectiveness of available defense mechanisms.
(this addition)
- Build a minimal, explainable passive WIDS for exactly the attack class the original lab demonstrated, grounded in real prior art (Kismet, Cisco WIDS signatures) rather than an invented threshold.
- Treat detection as rate/behavior-based, never a single-frame or single-reason-code trigger — and document why, since both the claimed transmitter address and the reason code are attacker-controllable when PMF is absent.
- Validate against a labeled, synthetic PCAP corpus with an offline pytest suite, so CI can actually run it — no hardware, no monitor mode, no root required.
(original) Kali Linux; Aircrack-ng suite (airmon-ng, airodump-ng,
aireplay-ng); Wireshark; ALFA AWUS036NHA (monitor-mode-capable wireless
adapter)
(this addition) Python 3.12, Scapy 2.7 (802.11 parsing, live sniff and offline PCAP replay), pytest, Ruff, PyYAML, GitHub Actions
(original) N/A — this is a lab report, not a coded tool.
(this addition — see deauthguard/README.md for full detail)
- Four independent, explainable detection rules:
disconnect-burst,targeted-disconnect-burst,broadcast-disconnect,victim-sweep. - Works identically against a live monitor-mode interface or an offline PCAP (same parser, same detection engine, PCAP capture timestamps used instead of processing speed).
- Conservative radio-retry deduplication that never collapses a genuine flood.
- Alert coalescing (
detected→updated→recovered) instead of one alert per matching frame. - A
deauthguard explain-reason <code>command that surfaces 802.11 reason codes along with the caveat that they're attacker-suppliable, not proof. - 24 pytest tests against committed, synthetic (reserved-MAC) PCAP fixtures — fully offline, runnable in CI.
(original)
- Put the wireless adapter into monitor mode (
airmon-ng). - Scan for the target (own) network (
airodump-ng). - Run a broadcast deauth attack (
aireplay-ng --deauth 1000). - Run a targeted deauth attack against a specific client (
aireplay-ng --deauth 100 -c [client]). - Verify both attacks in Wireshark using the
wlan.fc.type_subtype == 0x0cfilter. - Compare defense mechanisms (802.11w/PMF, WPA3, WIDS, firmware updates, VPN, MAC filtering).
(this addition)
7. Design a detection engine around real WIDS precedent (Kismet's
DEAUTHFLOOD/BCASTDISCON alerts, Cisco's management-frame flood
signatures) rather than an arbitrary threshold — see PROJECT_NOTES.md
for the full research writeup and citations.
8. Generate labeled synthetic PCAP fixtures (normal traffic, a targeted
flood, a broadcast flood, a multi-client sweep, radio retries, a slow
below-threshold trickle) and pin exact sliding-window boundary behavior
with pytest.
9. Exercise the CLI end-to-end against every fixture and confirm the
rendered alerts match the expected rule, severity, and evidence.
squall/
README.md, PROJECT_NOTES.md, CHANGELOG.md, project.yaml
deauthguard/ NEW: the passive disconnect-flood detector
README.md design writeup, rules table, limitations
src/deauthguard/ parser, sources, dedup, detector, cli, reasons
config/default.yaml Kismet-inspired defaults, documented as such
tests/ 24 pytest tests + tests/pcaps/ synthetic fixtures
tools/generate_test_pcaps.py regenerates the fixtures
validation/README.md honest status of real-capture validation
docs/network-security-deauthentication-report.docx (+ .pdf) original, untouched
references/references.md
screenshots/
.github/workflows/deauthguard-ci.yml NEW: lint + full offline pytest run
Original: N/A — no test/attack scripts were included with the submission beyond the documented Aircrack-ng commands.
New (deauthguard/):
cd deauthguard
python -m venv .venv && source .venv/bin/activate # or .venv\Scripts\activate on Windows
pip install -e ".[dev]"Original: N/A.
New:
cd deauthguard
deauthguard analyze tests/pcaps/broadcast_flood.pcap
deauthguard monitor wlan0mon # requires a monitor-mode interface
deauthguard explain-reason 7- Start with this README, then
docs/network-security-deauthentication-report.docxfor the original. - Review
screenshots/(7 images) for the original attack setup, execution, and Wireshark verification. - New: read
deauthguard/README.md, thenPROJECT_NOTES.mdfor the full research writeup (Kismet/Cisco precedent, the reason-code/PMF caveats, and the alert-coalescing design). - Run
cd deauthguard && pytest -qanddeauthguard analyze tests/pcaps/broadcast_flood.pcapto see it work firsthand.
See screenshots/ — includes adapter/monitor-mode setup, network scanning,
attack execution, and Wireshark verification of captured deauth frames and
handshakes (original, unchanged).
Original: both broadcast and targeted deauthentication attacks successfully disconnected the target client; Wireshark confirmed the deauth frames and captured a WPA2 4-way handshake. The report includes a defense-mechanism comparison table: 802.11w/PMF and WPA3 rated High effectiveness, WIDS Medium-High, firmware updates Medium, VPN (protects traffic but doesn't stop deauth), and MAC filtering Low (trivially spoofable).
New: DeauthGuard's 24-test pytest suite passes cleanly (offline,
synthetic PCAP fixtures) and Ruff reports zero issues. Run against the
committed fixtures, it correctly stays silent on normal and slow
below-threshold disconnect traffic, and correctly raises high/critical
alerts with accurate evidence on the targeted-flood, broadcast-flood, and
multi-client-sweep fixtures — see deauthguard/README.md "Detection
rules" for the exact thresholds. Real-capture validation against the
original lab's own traffic is not yet available — see
deauthguard/validation/README.md for why, and what's needed to close
that gap honestly rather than fabricate a result.
(original)
- Lab-only, single-router scope; no evaluation of enterprise WIDS/WIPS deployments.
- Findings apply to unprotected 802.11 management frames generally, not to networks already running 802.11w/WPA3.
(this addition — see deauthguard/README.md "Limitations" for full detail)
- Single-channel visibility only (one monitor-mode radio watches one channel at a time).
- Does not currently detect PMF/802.11w state itself, though an alert under PMF still has meaning (an attempted, not necessarily successful, disruption).
- No cross-BSSID correlation across a rotating-BSSID attacker.
- No validation yet against a real (non-synthetic) capture — see
deauthguard/validation/README.md.
(original)
- (none stated in the source report)
(this addition)
- Derive PMF/RSN state from beacon/probe-response frames instead of static config.
- A real authorized-capture validation run, once/if one becomes available.
- Multi-radio or channel-hopping coverage.
- The original attack was performed only against the team's own router, explicitly for simulation.
- The report states an intent to redact "sensitive identifiers such as MAC addresses where necessary." One network-scan screenshot in this project
(
screenshots/04-network-scanning-packet-capture.png, also embedded in the DOCX/PDF report) shows unredacted BSSIDs/SSIDs of real neighboring Wi-Fi networks picked up incidentally during the scan — only the target row is blacked out. This was reviewed and kept as originally submitted; seePROJECT_NOTES.mdfor the full note on this. deauthguard/'s test fixtures use only synthetic, locally-administered (reserved-range) MAC addresses — no real network or client identifiers are present anywhere in the new code.
This project is intended strictly for personal learning and authorized security research. The original attack lab was performed only against equipment the team owns and controls, for simulation purposes. Deauthentication attacks against networks you do not own or have explicit authorization to test are illegal in most jurisdictions and must not be performed.
deauthguard/ is purely passive and defensive — it never transmits an
802.11 frame. It only listens (live) or replays a file (offline) and
reports what it observes; running it against any network, owned or not,
carries none of the original lab's authorization concerns.

