目标网站xxx.com,代理服务器xxxproxy.com,通过代理服务器实现流量转发。
package main
func handle(src net.Conn){
dst,err:=net.Dial("tcp","xxx.com:80")
if err!=nil{
log.Fatalln("Unable to connect out unreachable host")
}
defer dst.Close()
//io.Copy确保第一次来自代理服务器的数据复制到目标主机
//因为io.Copy函数是一个阻塞函数,阻塞直到关闭连接,所以将其包装进一个groutine中,并行执行。这样handle中的执行就可以继续进行,并可以进行第二次io.Copy
go func(){
if _,err:=io.Copy(dst,src);err!=nil{
log.Fatalln(err)
}
}()
if _,err:=io.Copy(src,dst);err!=nil{
log.Fatalln(err)
}
}
func main(){
listener,err:=net.Listen("tcp","xxxproxy.com:80")
if err!=nil{
log.Fatalln("ubable to bin to port")
}
for {
conn,err:=listener.Accept()
if err!=nil{
log.Fatalln("Ubable to accept connection")
}
go handle(conn)
}
}
标签:log,err,nil,Fatalln,TCP,Golang,io,Copy,客户端
From: https://www.cnblogs.com/Weber-security/p/17346870.html