snail007 / goproxy

🔥 Proxy is a high performance HTTP(S) proxies, SOCKS5 proxies,WEBSOCKET, TCP, UDP proxy server implemented by golang. Now, it supports chain-style proxies,nat forwarding in different lan,TCP/UDP port forwarding, SSH forwarding.Proxy是golang实现的高性能http,https,websocket,tcp,socks5代理服务器,支持内网穿透,链式代理,通讯加密,智能HTTP,SOCKS5代理,黑白名单,限速,限流量,限连接数,跨平台,KCP支持,认证API。
https://snail007.host900.com/goproxy/manual/zh/
GNU General Public License v3.0
15.87k stars 3.01k forks source link

关于 API认证时UDP通信时的问题 #500

Open agenge opened 2 years ago

agenge commented 2 years ago

Expected Behavior

使用API认证(--auth-url)时,UDP能通过认证,且成功代理。

Current Behavior

UDP程序通信时,使用API认证(--auth-url)无法通过认证

Possible Solution

Steps to Reproduce

  1. 启动命令: proxy sps -t tcp -p ":1880" --udp-port 1880 --udp --disable-ss --disable-http --auth-url http://127.0.0.1/auth.php

2.Python写了个 UDP Server/Client(参考示例:点这里),使用命令行认证模式,UDP测试正常。 但使用 --auth-url 认证模式,提示认证失败,报以下错误:

utils/structs.go:501 WARN auth fail from url http://127.0.0.1/auth.php?user=&pass=&client_addr=1.1.1.1:28761&local_addr=[::]:1880&target=&service=socks&sps=1,resonse code: 200, except: 204 , 1.1.1.1:28761 -> [::]:1880 可以看出 user pass都为空导致。

  1. 通过tcpdump抓包,发现有2次 http请求(实际上测试工具只请了一次),但是抓包的结果来看,第一次请求有带认证信息,第二次请求无认证信息(user pass为空)

tcpdump -A -i lo tcp port 1880

Context (Environment)

  1. proxy version is : commercial_12.1
  2. full command is : proxy sps -t tcp -p ":1880" --udp-port 1880 --udp --disable-ss --disable-http --auth-url http://127.0.0.1/auth.php
  3. system is : Ubuntu 20.04.4 LTS 、Kernel: Linux ubuntu 5.4.0-125
  4. full log is: ?

Detailed Description

Possible Implementation