登录
首页 >  Golang >  Go问答

使用Go实现SOCKS5代理

来源:stackoverflow

时间:2024-02-19 13:33:25 276浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《使用Go实现SOCKS5代理》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我想知道是否可以侦听本地端口,例如:1080ocks5,并且该端口上的所有连接都可以作为代理以使用外部主机:portsocks5

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执行代理并将其传递到dialect.dial


正确答案


听起来你想要这个:

  1. 一种使用 TCP 在特定端口侦听本地计算机的工具
  2. 您可以向该端口发出ocks5协议请求,它应该将这些请求全部转发到另一台远程计算机上的其他socks5服务器。
  3. 该socks5服务器负责与socks5协议请求中的目标建立连接

在这种情况下,您只需要一个基本的 TCP 代理。您的工具不需要查看socks5请求的内部,也不需要proxy.SOCKS5来连接到远程计算机。您只想将与本地端点的所有连接转发到远程端点。

您当前的代码在很大程度上可以工作,例外情况是您应该使用 net.Dial (而不是 dialect.Dial)连接到 "externalhost:externalport",并且不需要创建 proxy.SOCKS5 拨号器。

理论要掌握,实操不能落!以上关于《使用Go实现SOCKS5代理》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>