GOLANG实现Socks5代理(1)|青训营笔记

211 阅读2分钟

什么是Socks5?什么是代理服务器?
Socks5是一种代理协议,它在使用TCP/IP协议通信的前端机器和服务器之间发挥中介作用,使得内部网中的前端机器能够访问Internet网中的服务器。
代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。

由上述内容我们可知,处于使用TCP/IP协议通信的前端机器,将信息或请求发送给Socks5,再由Socks5发送给服务器,使得内部网中的前端机器能够访问Internet网中的服务器。这就是Socks5代理服务器的主要功能。
接下来,我们将主要介绍如何使用GOLANG实现Socks5代理服务器

1.TCP echo server
首先,我们现实一个TCP echo server的简单功能,监听一个端口,并将监听到的信息返回并输出,先看main函数。

func main() {
   server, err := net.Listen("tcp", "127.0.0.1:1080")
   if err != nil {
      panic(err)
   }
   for {
      client, err := server.Accept()
      if err != nil {
         log.Printf("Accept failed %v", err)
         continue
      }
      go process(client)
   }
}

main函数里面,我们先定义了一个net.Listen去监听一个端口,监听的结果返回一个server,这个server就是一个TCPListener。如果出现err,则发出panic。接下来在死循环中使用server.Accept接受一个请求,如果成功,则返回client;如果失败,则输出failed,并继续下一次循环。最后go开启协程,并在协程中使用process函数处理client

接下来,为了后续文中的内容做铺垫,我来介绍一个golang中很有意思的关键字defer,用法为defer<函数 func>defer用于声明其后的元素为延迟函数,可以定义多个延时函数,这些函数在return之后按照defer的逆序执行,也就是说最后被defer的函数,最先被执行。defer一般被用于资源的释放和异常的捕捉。