我想知道是否有可能听取本地端口ex:1080 socks5,并将该端口上的所有连接设置为代理以使用外部主机:port socks5
func main() {
l, err := net.Listen("tcp", "127.0.0.1:1080")
if err != nil {
fmt.Print(err)
}
defer l.Close()
for {
conn, err := l.Accept()
if err != nil {
fmt.Print(err)
}
go handle(conn)
}
}
func handle(conn net.Conn) {
defer conn.Close()
dialect, err := proxy.SOCKS5("tcp", "externalhost:externalport", nil, proxy.Direct)
newConn, err := dialect.Dial("tcp", "targethost:targetport")
if err != nil {
log.Printf("Connection error: %s", err.Error())
}
go func() {
_, err = io.Copy(newConn, conn)
if err != nil {
log.Printf("Connection error: %s", err.Error())
}
}()
_, err = io.Copy(conn, newConn)
if err != nil {
log.Printf("Connection error: %s", err.Error())
}
}
func handle(conn net.Conn) {
defer conn.Close()
}
我需要获取目的地址并验证连接是否为socks5,然后使用外部IP执行代理并以方言传递它。拨号
1条答案
按热度按时间2w2cym1i1#
听起来你想要这个:
1.在本地计算机上使用TCP在特定端口进行侦听的工具
1.您可以向该端口发出socks5协议请求,它应该将这些请求全部转发到另一台远程计算机上的另一个socks5服务器。
1.该socks5服务器负责在socks5协议请求中建立到目标的连接
在这种情况下,您只需要一个基本的TCP代理,您的工具不需要查看socks5请求,也不需要
proxy.SOCKS5
来连接到远程计算机,您只需要将所有到本地端点的连接转发到远程端点。您当前的代码在很大程度上可以工作,只是您应该只使用
net.Dial
(而不是dialect.Dial
)连接到"externalhost:externalport"
,并且不需要创建proxy.SOCKS5
拨号器。