代码拉取完成,页面将自动刷新
package main
import (
"flag"
"log"
"net"
"gitee.com/terender/tcptunnel/stream"
"gitee.com/terender/sfw/quit"
"gitee.com/terender/sfw/rlog"
)
func main() {
port := flag.String(`p`, `9527`, `Listening port`)
remote := flag.String(`r`, ``, `Remote address`)
flag.Parse()
if *port == `` || *remote == `` {
flag.PrintDefaults()
return
}
addr, err := net.ResolveTCPAddr(`tcp`, *remote)
if err != nil {
log.Print(err)
flag.PrintDefaults()
return
}
rlog.Init(`tcptunnel`, false)
defer rlog.Quit()
quit.WatchStdKillSignal()
go func() {
listener, err := net.Listen("tcp", `:`+*port)
if err != nil {
rlog.Errorf("listening err:%s", err.Error())
return
}
log.Printf(`listening on port %s`, *port)
for {
conn, err := listener.Accept()
if err != nil {
rlog.Errorf("accept err(before): %s ", err.Error())
if ne, ok := err.(net.Error); ok && ne.Temporary() {
rlog.Infof("accept net error: %+v", ne)
continue
}
rlog.Errorf("accept error(after): %+v", err.Error())
return
}
go func(conn net.Conn) {
remote, err := net.DialTCP(`tcp`, nil, addr)
if err != nil {
rlog.Errorf(`Try to connect %s encounterd an error: %v`, *remote, err)
return
}
//log.Printf(`建立了到 %s --- %s 的连接`, conn.RemoteAddr().String(), remote.RemoteAddr().String())
go stream.UpStream(conn, remote)
go stream.DownStream(conn, remote)
}(conn)
}
}()
quit.Wait()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。