为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以通过 websockets 或其他协议传输 TCP 连接?

是否可以通过 websockets 或其他协议传输 TCP 连接?

Go
莫回无 2021-11-01 16:16:50
我想知道,是否可以通过 websockets 协议传输/隧道 TCP 连接?有一个websockets 包,似乎我可以将 TCP 连接 io.copy 到 websockets 连接中,但我不知道如何在另一端将其重新组装为 TCPConn。例如,我想在一端创建一个 socks5 ServerN(在 NAT 后面),在另一端创建一个 ServerIE。互联网用户会向 ServerIE 发出socks5 请求(通过socks5 协议),ServerIE 会通过websocket 连接将socks5 请求发送到ServerNAT。ServerNAT 然后将处理socks5 请求(即它是socks5 服务器)。编辑: 我写了一些代码,但不幸的是它在从 TCP 连接读取到 WS 时卡住了。运行它:go run main.go -logtostderrpackage mainimport (    "flag"    log "github.com/golang/glog"    "golang.org/x/net/websocket"    "bufio"    "net"    "net/http"    "time"//  "io")func main() {    flag.Parse()    defer log.Flush()    log.Infof("wsServer()")    wsCh := wsServer()    log.Infof("wsNAT()")    natWS, err := wsNAT()    if err != nil {        log.Error(err)        return    }    done := make(chan struct{}, 1)        log.Infof("listenTCP()")        conn := listenTCP()        buf := bufio.NewReader(conn)    go func() {        log.Infof("Write TCP to WS")        n, err := buf.WriteTo(natWS)        if err != nil {            log.Fatal(err)            return        }        log.Infof("newConn.ws.ReadFrom(conn) %v", n)        close(done)    }()    wsToTCP(<- wsCh)    <-done}// wsNAT dials /ws endpoint and returns a websocket connection.func wsNAT() (*websocket.Conn, error) {    time.Sleep(1 * time.Second)    origin := "http://localhost/"    url := "ws://localhost:12345/ws"    return websocket.Dial(url, "", origin)} // wsServer returns the websocket // connections received on /ws endpointfunc wsServer() chan *websocket.Conn {    wsCh := make(chan *websocket.Conn, 1)    http.Handle("/ws", websocket.Handler(func(ws *websocket.Conn) {        wsCh <- ws        time.Sleep(1 *time.Hour)    }))    go func() {        err := http.ListenAndServe(":12345", nil)        if err != nil {            panic("ListenAndServe: " + err.Error())        }    }()    return wsCh}要触发 TCP 侦听器,您可以在端口 8080 上发出请求(例如curl --socks5 localhost:8080 google.com -v或curl localhost:8080 -v)
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信