Traffic Capture
Working on the HTTP capture proxy and its replay/fuzz path: the egress guard that stops...
Install
npx skills add samugit83/redamon --skill traffic-capture -g -a claude-code -y- Repository
- samugit83/redamon3.3k
- Category
- AI and agents
- Updated
- 3d ago
- License
- MIT
- Context cost
- Lightabout 694 tokens
- Runs scripts
- No, instructions only
What it does
Working on the HTTP capture proxy and its replay/fuzz path: the egress guard that stops the proxy becoming an SSRF pivot, why it checks the resolved IP, and keeping capture off the scan's critical path. Trigger: editing scanners/capture_proxy/ (capture_addon.py, egress.py, ingest_worker.py); adding a forward/replay/fuzz path; changing EgressPolicy or the internal denylist; wiring an agent tool that replays captured traffic.
When to Use
- Changing how the proxy forwards, captures, ingests, or replays traffic.
The one-line "route every egress through the guard" rule is in the capture_proxy AGENTS.md CRITICAL RULES; this skill is the mechanism.
Critical Rules
- NEVER match the internal denylist on the hostname alone. The guard denies on the resolved IP (RFC1918 and friends), because a hostname that resolves to an internal address (or re-resolves after a check) is the SSRF/DNS-rebinding case. See scanners/capture_proxy/egress.py (the block conditions operate on the resolved IP).
- NEVER build a replay/fuzz target from unvalidated LLM output and send it
straight out. The replay path is a new egress path; it must pass the same
EgressPolicyguard as captured traffic, or the agent can be steered into an internal pivot. Args must not reach the wire un-guarded. - NEVER remove a block condition to "make replay work". Each condition is
individually toggleable via
EgressPolicy(surfaced in settings); loosen it there, per-condition, not by deleting the check. - ALWAYS keep capture and ingest off the scan's critical path. Capture writes an append-only spool; a separate worker tails it into Postgres (scanners/capture_proxy/ingest_worker.py). That decoupling is deliberate - capture must never block or slow the scan it observes.
The capture pipeline
| Stage | File | Note |
|---|---|---|
| intercept | capture_addon.py | mitmproxy addon; request/response hooks |
| egress guard | egress.py | resolved-IP denylist + EgressPolicy toggles; the SSRF backstop |
| ingest | ingest_worker.py | tails the spool -> Postgres; off the scan path |

