This is a creation in Article, where the information may have evolved or changed.
Beginner go, write a port forwarding tool. Very handy gadget, hope to learn the go language for everyone to help.
```
Packagemain
Import
"FMT"
"IO"
"NET"
"Sync"
)
Varlocksync. Mutex
Vartruelist[]string
Varipstring
Varliststring
Funcmain () {
ip= "0.0.0.0:888"
Server ()
}
Funcserver () {
Fmt. Printf ("listening%s", IP)
Lis,err:=net. Listen ("tcp", IP)
iferr!=nil{
Fmt. PRINTLN (ERR)
Return
}
Deferlis. Close ()
for{
Conn,err:=lis. Accept ()
iferr!=nil{
Fmt. PRINTLN ("Establish connection error:%v\n", err)
Continue
}
Fmt. PRINTLN (Conn. Remoteaddr (), Conn. LOCALADDR ())
Gohandle (conn)
}
}
Funchandle (sconnnet. Conn) {
Defersconn. Close ()
ip:= "127.0.0.1:8888"
Dconn,err:=net. Dial ("tcp", IP)
iferr!=nil{
Fmt. Printf ("Connection%v failed:%v\n", Ip,err)
Return
}
Exitchan:=make (chanbool,1)
Gofunc (sconnnet. Conn,dconnnet. Conn,exitchanbool) {
Io. Copy (Dconn,sconn)
Exitchan<-true
} (Sconn,dconn,exitchan)
Gofunc (sconnnet. Conn,dconnnet. Conn,exitchanbool) {
Io. Copy (Sconn,dconn)
Exitchan<-true
} (Sconn,dconn,exitchan)
<-exitchan
Dconn. Close ()
}
```