Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 向代理服务器发送TCP数据包_Go_Tcp - Fatal编程技术网

Go 向代理服务器发送TCP数据包

Go 向代理服务器发送TCP数据包,go,tcp,Go,Tcp,我熟悉HTTP_PROXY,并定义了代理HTTP请求的DefaultTransport。但我找不到任何关于如何对TCP执行相同操作的信息。这可能吗?或者我必须依靠代理本身来转发数据包吗?这是可能的,但不需要HTTP代理。你想要一个袜子代理。查看提供SOCKS5拨号器的软件包 package main import ( "fmt" "os" "golang.org/x/net/proxy" ) var ( proxy_addr = "my.socks.pro

我熟悉HTTP_PROXY,并定义了代理HTTP请求的DefaultTransport。但我找不到任何关于如何对TCP执行相同操作的信息。这可能吗?或者我必须依靠代理本身来转发数据包吗?

这是可能的,但不需要HTTP代理。你想要一个袜子代理。查看提供SOCKS5拨号器的软件包

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
}

这取决于你想做什么。TCP代理是可能的,但是,您不能基于主机重定向流量,因为TCP传输协议不像HTTP那样包含主机头。是的,在阅读了更多内容后,我得出了相同的结论。感谢您的回答。不幸的是,此脚本挂起拨号到远程address@PrisacariDmitrii如果不将proxy_addr的值更改为工作SOCKS5 proxy,那么我认为它将挂起yes。在编写本文时,使用proxy_addr和remote_addr的有效值,这段代码运行良好。