socks5代理使用go

l7mqbcuq  于 2023-01-06  发布在  Go
关注(0)|答案(1)|浏览(434)

我想知道是否有可能听取本地端口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执行代理并以方言传递它。拨号

2w2cym1i

2w2cym1i1#

听起来你想要这个:
1.在本地计算机上使用TCP在特定端口进行侦听的工具
1.您可以向该端口发出socks5协议请求,它应该将这些请求全部转发到另一台远程计算机上的另一个socks5服务器。
1.该socks5服务器负责在socks5协议请求中建立到目标的连接
在这种情况下,您只需要一个基本的TCP代理,您的工具不需要查看socks5请求,也不需要proxy.SOCKS5来连接到远程计算机,您只需要将所有到本地端点的连接转发到远程端点。
您当前的代码在很大程度上可以工作,只是您应该只使用net.Dial(而不是dialect.Dial)连接到"externalhost:externalport",并且不需要创建proxy.SOCKS5拨号器。

相关问题