关于参数不太理解
NewClassicServer(addr, ip, username, password, tcpTimeout, udpTimeout)
这个接口即有addr,又有ip 。能说明设计之初,两者之间的区别么
UDP
addr:监听地址 ip: socks5 server 真正的 IP。
因为 socks5 server 的 UDP 地址是:当客户端向服务端询问的时候,需要由服务端告诉客户端的,所以你得先告诉服务端程序应该告诉客户端什么。记住这句话
有两种情况。有NAT和无NAT的环境。
无NAT环境:
比如你买了一个机器。公网IP是 1.2.3.4。此时你进入机器,你会发现网卡上的确绑定了 1.2.3.4。
就可以直接 addr 为 1.2.3.4:1080,ip 为 1.2.3.4。最终客户端使用的时候就是 1.2.3.4:1080
这时当客户端向服务端询问UDP 地址时,程序就需要告诉客户端,也就是这个 ip, 你好客户端,去连这个UDP吧: 1.2.3.4:1080,
有NAT环境
比如你买了一个 google cloud 机器。公网IP是 5.6.7.8。此时你进入机器,你会发现网卡没有 5.6.7.8,只有内网 IP 比如 192.168.1.2。所以也无法监听 5.6.7.8,只能监听 192.168.1.2
这时 addr 只能为 192.168.1.2:1080,ip 为 5.6.7.8。最终客户端使用的时候就是 5.6.7.8:1080
这时当客户端向服务端询问UDP 地址时,程序就需要告诉客户端,也就是这个 ip, 你好客户端,去连这个UDP吧: 5.6.7.8:1080,
具体解释看这边文章
https://www.txthinking.com/talks/articles/socks5-and-http-proxy.article