Go 语言基础(11) | 青训营笔记

111 阅读1分钟

SOCKS5 代理服务器

SOCKS5 协议简介

  • 明文传输(没法用来刷 Jiafei)
  • 公司里有内网,在内网严格的防火墙策略里给授权的用户开一个端口访问内网资源

SOCKS5 协议原理

TCP echo server

package main

import (
	"bufio"
	"log"
	"net"
)

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)
	}
}

func process(conn net.Conn) {
	defer conn.Close()
	reader := bufio.NewReader(conn)
	for {
		b, err := reader.ReadByte()
		if err != nil {
			break
		}
		_, err = conn.Write([]byte{b})
		if err != nil {
			break
		}
	}
}

这段代码的运行结果就是你发送什么服务器就返回什么。简单测试一下:

在第一个窗口里运行程序:

image.png

在第二个窗口里访问这个端口,然后随便打一点什么,回车以后服务器会返回一样的东西:

image.png