Skip to content

v2.0.0b3 — Full IPv6 support

Pre-release
Pre-release

Choose a tag to compare

@bluet bluet released this 09 May 13:59
· 17 commits to master since this release

🌐 Full IPv6 support — first-class across the stack

This release makes IPv6 a peer of IPv4 across detection, validation, anonymity comparison, SOCKS5 proxying, HTTP CONNECT bracketing, provider parsing, and DNS resolution.

Closes: #201 (IPv6 epic) and #214 (test infra).

Headline changes

  • End-to-end IPv6Resolver.host_is_ip, get_real_ext_ip, get_all_ip, _get_anonymity_lvl, Judge.check, Proxy(host=...), and [v6]:port provider parsing all handle IPv6 alongside IPv4.
  • Happy Eyeballs DNS (RFC 8305 § 3)Resolver.resolve() races A and AAAA queries in parallel by default; explicit qtype or family falls back to the legacy single-family contract.
  • SOCKS5 ATYP=0x04 for IPv6 destinations (RFC 1928), with response-ATYP-driven reply parsing for dual-stack proxies that may bind a different family than the client requested.
  • RFC 9112/9110-compliant CONNECT bracketingCONNECT [2001:db8::1]:443 HTTP/1.1 + Host: [2001:db8::1]; strips caller-supplied brackets so urlparse(...).netloc style inputs don't double-bracket.
  • RFC 5952 canonical form as the single in-process IP representation across every comparison site.
  • New public helpers: canonicalize_ip(s) -> str | None, find_proxy_pairs(text) -> list[tuple[str, str]].
  • IPv6Pattern 700-character regex deleted along with its # nosemgrep suppression — replaced by a narrow tokenizer + stdlib ipaddress validator.

Quality

  • +36 IPv6 tests (259 total); all 5 Python matrix cells (3.10–3.14) green.
  • coderabbit ✅ approved; SonarCloud Quality Gate passed; opsera scan 0 critical/high.

Follow-ups (filed)

  • #213 connection-layer Happy Eyeballs + DNSSEC + IDN
  • #215 codebase-wide type hints + mypy CI
  • #216 SBOM + sigstore (supply-chain hardening)
  • #217 cert pinning for default judge servers
  • #218 opt-in ECH (Encrypted Client Hello)
  • #219 opt-in TLS 1.3-only mode
  • #220 deterministic IPv6 external-IP discovery

Install

# Docker (multi-arch: amd64 + arm64)
docker pull bluet/proxybroker2:2.0.0b3
docker run --rm bluet/proxybroker2:2.0.0b3 find --types HTTP --limit 5

# pip (from GitHub)
pip install -U git+https://github.com/bluet/proxybroker2.git@v2.0.0b3

See CHANGELOG.md for the full diff.

Generated with Claude Code