将TCP数据包发送到代理服务器

时间:2016-11-22 18:35:13

标签: go tcp

我熟悉HTTP_PROXY并定义DefaultTransport来代理HTTP请求。但我找不到任何关于如何为TCP做同样的事情。这可能吗?或者我是否必须依赖代理本身来转发数据包?

1 个答案:

答案 0 :(得分:0)

这是可能的,但不适用于HTTP代理。你想要一个SOCKS代理。查看提供SOCKS5拨号器的https://godoc.org/golang.org/x/net/proxy包。

package main

import (
    "fmt"
    "os"

    "golang.org/x/net/proxy"
)

var (
    proxy_addr  = "my.socks.proxy.local:8088"
    remote_addr = "chat.freenode.net:6697"
)

func main() {
    dialer, err := proxy.SOCKS5("tcp", proxy_addr, nil, proxy.Direct)
    if err != nil {
        fmt.Fprintln(os.Stderr, "proxy connection error:", err)
        os.Exit(1)
    }
    conn, err := dialer.Dial("tcp", remote_addr)
    if err != nil {
        fmt.Fprintln(os.Stderr, "remote connection error:", err)
        os.Exit(1)
    }
    defer conn.Close()

    // communicate with remote addr here
}