TCP代理
实现通过一个代理服务器访问一个网站
在代理服务器上执行以下代码;本机直接访问代理服务器的80端口即可访问到A网站
package main
import (
"io"
"log"
"net"
)
func handle(src net.Conn) {
dst, err := net.Dial("tcp", "A网站:http")//代理服务器与网站A建立tcp连接
if err != nil {
log.Fatalln("unable to connect to our unreachable host")
}
defer dst.Close()
//在gorountine 中运行防止 io.Copy被阻塞
go func() {
//将源的输出复制到目标即将本机的流量转发到A网站
if _, err := io.Copy(dst, src); err != nil {
log.Fatalln(err)
}
}()
//将目标的输出复制回源即将A网站的返回流量转发回到本机
if _, err := io.Copy(src, dst); err != nil {
log.Fatalln(err)
}
}
func main() {
//代理服务器在本地的80端口上监听
listener, err := net.Listen("tcp", ":80")
if err != nil {
log.Fatalln("unable to bind to port")
}
for {
conn, err := listener.Accept()
if err != nil {
log.Fatalln("unable to accept connection")
}
go handle(conn)//开启协程可