Skip to main content

ipspoof

HTTP header/IP allowlist bypass discovery tool for authorized security testing.

PyPI version PyPI - Python versions Downloads Python License Platform

ipspoof helps pentesters and bug bounty hunters quickly identify which HTTP header a web application trusts for client-IP-based access control, and which IP range bypasses the allowlist. Common in labs, CTFs, and real-world engagements where you see messages like:

Your IP is not allowed to use this webservice. Only 10.10.10.x is allowed

ipspoof demo


Features

  • Header discovery — tests 100+ client-IP headers (X-Forwarded-For, X-Real-IP, Forwarded, Client-IP, CF-Connecting-IP, etc.) with a curated set of trusted IP values.
  • IP fuzzing — once a working header is found, brute-forces the allowed IP range (e.g. 10.10.10.1-254).
  • Smart anomaly detection — catches bypasses by status change, size change, body hash, or body regex.
  • XFF chain variations1.2.3.4, <ip>, <ip>, 1.2.3.4, for=<ip>.
  • POST/PUT/PATCH support — works against login forms and API endpoints.
  • Proxy rotation — round-robin through a proxy list.
  • Tor support — route through SOCKS5 with automatic identity rotation.
  • Rate limiting — avoid bans during brute-force.
  • JSON output — machine-readable results for reporting.
  • Interactive mode — guided prompts for quick runs.

ipspoof features


Installation

pipx install ipspoof

pip

pip install ipspoof

From source

git clone https://github.com/Exript/ipspoof.git
cd ipspoof
pipx install .

For Tor support:

pipx install "ipspoof[tor]"

Usage

Basic

ipspoof -u http://target/login.php --follow

Output:

ipspoof output

Full pipeline (header discovery + IP fuzz)

ipspoof -u http://target/login.php \
  --phase2 --ip-pattern "10.10.10.{n}" --ip-range 1-254 \
  --follow

POST login attempt

ipspoof -u http://target/login.php \
  -X POST -d "username=admin&password=admin" \
  --body-regex "dashboard|welcome" \
  --follow

Tor + periodic identity rotation

ipspoof -u http://target/ --tor --tor-new-every 10

Proxy list + rate limit

ipspoof -u http://target/ --proxy-file proxies.txt --rate 30

Interactive

ipspoof -i

Output:

ipspoof interactive output


Options

Flag Description
-u, --url Target URL
-i, --interactive Interactive mode
-t, --threads Concurrent threads (default 30)
--timeout Request timeout (default 8s)
--follow Follow redirects
-c, --cookie Cookie string
-X, --method HTTP method (default GET)
-d, --data Form data (for POST)
--json JSON body (for POST)
-H, --header Extra static header (repeatable)
--proxy Single proxy
--proxy-file Proxy list file
--tor Route through Tor SOCKS5
--tor-new-every N Rotate Tor identity every N requests
--rate N Max requests per second
--body-regex Only treat body regex match as HIT
--body-hash Treat hash change as HIT
--size-tol Size tolerance (default 0.05)
--chain Try XFF chain variations
--ip IPs for Phase 1 (repeatable)
--phase2 Run IP fuzz phase
--ip-pattern IP pattern (default 10.10.10.{n})
--ip-range IP range (default 1-254)
-o, --output Save results as JSON

Tor setup (optional)

For --tor-new-every, add to /etc/tor/torrc:

ControlPort 9051
CookieAuthentication 0

Then:

sudo systemctl restart tor

Without this, --tor still works but --tor-new-every will only print a warning.


How it works

  1. Baseline — sends a request with no spoof headers. Records status, size, and body hash of the "deny" response.
  2. Phase 1 — for each (header, trusted IP) pair, sends a request and compares the response against baseline. Any response with a different status, size, hash, or regex match is flagged as a HIT.
  3. Phase 2 — takes the working header(s) from Phase 1 and brute-forces the IP range you specify.

The tool never sends anything malicious — it only adds HTTP headers to ordinary requests.


This tool is for authorized security testing only. Use it against:

  • Systems you own
  • Systems you have explicit written permission to test
  • CTF/lab environments designed for testing

Unauthorized use against third-party systems is illegal in most jurisdictions. The author takes no responsibility for misuse.


Contributing

PRs welcome. Please open an issue first for major changes.

git clone https://github.com/Exript/ipspoof.git
cd ipspoof
pip install -e ".[dev]"

License

MIT — see LICENSE.

Release files for ipspoof 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ipspoof 2.0.1
File Size Uploaded
ipspoof-2.0.1.tar.gz 13.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ipspoof 2.0.1
File Interpreter ABI Platform
ipspoof-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.0 kB

Release files / ipspoof-2.0.1.tar.gz

Download URL ipspoof-2.0.1.tar.gz
Size 13.7 kB
Tags Source
SHA-256 checksum
How to use checksums
78afe574ac31333884acb838814e52ebcd84906c16f551182de1f78cb4c93219
BLAKE2b-256 checksum
How to use checksums
c15b88219ad2a83bc6298b7a47c5f3ca9cb41e2f6cb8629140e64acbb4aa0ec3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / ipspoof-2.0.1-py3-none-any.whl

Download URL ipspoof-2.0.1-py3-none-any.whl
Size 12.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
15ee08510ab6804c33a562852f88cebcc6c457a527c4ac908b032153054c225e
BLAKE2b-256 checksum
How to use checksums
a1e49fd117881dfc4087a350cb37d5c6df9498d1c62a38c0f5e4325af25cdb30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

2.0.3

2 release files

2.0.2

2 release files

This release

2.0.1 This release

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page