Skip to content

name who is sending the 403 - #2801

Merged
Flotapponnier merged 1 commit into
mainfrom
fix/birdeye-403-source
Oct 4, 2026
Merged

Flotapponnier merged 1 commit into
mainfrom
fix/birdeye-403-source

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

I have assumed Cloudflare all afternoon without checking. A proxy that refuses an unauthorised source IP and an edge that refuses a datacenter both surface through gorilla as the same bad handshake 403.

Everything else is now eliminated by measurement:

checked result
the proxy's exit IPs the same proxy URL, read out of Railway, connects from a laptop
the dialer shape Proxy only, Proxy + NetDialContext, and getProxyDialer's exact shape all connect
the code on main getProxyDialer() is called, line 198
the variable in the container proxy configured (52 chars), the same length as the one that works

So the dial is right, the proxy is right, the code is right, and the refusal is still there.

Cloudflare stamps Server and Cf-Ray; a proxy rejecting a source sends neither. One log line settles which, and nothing short of it will.

Checks

  • go build ./... and go test ./cmd/script/ clean

🤖 Generated with Claude Code

@Flotapponnier
Flotapponnier force-pushed the fix/birdeye-403-source branch from 8d0170f to 5953a24 Compare October 4, 2026 13:32
Two assumptions I never checked, and one of them is probably the answer.

getProxyDialer sets Proxy only when url.Parse succeeds and drops it in
SILENCE otherwise, so a malformed value dials direct and looks exactly
like a refused proxy. The startup line added earlier proves the VARIABLE
exists; it proves nothing about whether this dialer carries it. Two
different facts, and I treated them as one.

And a proxy refusing an unauthorised source IP and an edge refusing a
datacenter both surface through gorilla as the same bad handshake 403.

Everything else is eliminated by measurement: the same proxy URL read out
of Railway connects from a laptop; three dialer shapes including
getProxyDialer's exact one all connect; getProxyDialer() is called; the
container reports the variable at the same 52 chars that work here.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Flotapponnier
Flotapponnier force-pushed the fix/birdeye-403-source branch from 5953a24 to e5970e8 Compare October 4, 2026 13:40
@Flotapponnier
Flotapponnier merged commit 6b88f56 into main Oct 4, 2026
2 checks passed
@Flotapponnier
Flotapponnier deleted the fix/birdeye-403-source branch October 4, 2026 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant