e2e: add PROXY protocol test (gost#677), bump core/x deps

ProxyProtoSuite starts gost with metadata.proxyProtocol set and asserts
the HAProxy PROXY header is prepended on outbound connections (v1/v2),
backed by a raw-TCP capture script and configs. Add echo754_repro.py
from the hot-reload EADDRINUSE investigation (gost#754).

Bump github.com/go-gost/core to v0.6.1 and x to v0.16.0.
This commit is contained in:
ginuerzh
2026-08-29 09:26:33 +08:00
parent 76467efc59
commit cb76f63754
7 changed files with 215 additions and 6 deletions
+22
View File
@@ -0,0 +1,22 @@
import socket, threading
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("127.0.0.1", 15738))
s.listen(50)
def loop(c):
try:
while True:
d = c.recv(65536)
if not d:
break
c.sendall(d)
except OSError:
pass
finally:
c.close()
while True:
c, _ = s.accept()
threading.Thread(target=loop, args=(c,), daemon=True).start()
+23
View File
@@ -0,0 +1,23 @@
# Raw-TCP backend for the PROXY-protocol e2e test (issue #677).
# Reads the first bytes of each connection and reflects whether a HAProxy
# PROXY protocol header was prepended by gost:
# - v1 ("PROXY TCP4 ...") -> "PROXY-RECEIVED: PROXY TCP4 ..."
# - v2 (12-byte signature) -> "PROXY-V2-RECEIVED"
# - neither -> "NO-PROXY"
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("0.0.0.0", 5678))
s.listen(5)
while True:
c, _ = s.accept()
d = c.recv(4096)
if d[:12] == b"\r\n\r\n\x00\r\nQUIT\n":
c.sendall(b"PROXY-V2-RECEIVED\n")
elif d[:6] == b"PROXY ":
c.sendall(b"PROXY-RECEIVED: " + d.split(b"\r\n", 1)[0] + b"\n")
else:
c.sendall(b"NO-PROXY\n")
c.close()