Home > Article > Backend Development > Using go's socks5 proxy
What php editor Youzi will introduce to you today is the socks5 proxy implemented in Go language. During network access, we often encounter situations where we need to hide our real IP address or bypass network blocks. Using socks5 proxy can help us achieve these goals easily. As an efficient and concise programming language, Go language has rich network libraries and concurrency features, and is very suitable for developing network proxy tools. Next, we will introduce in detail how to write a simple and practical socks5 proxy server using Go language.
I want to know if it is possible to listen on a local port, for example: 1080ocks5, and have all connections on that port proxy to use the external host: portsocks5
func main() { l, err := net.Listen("tcp", "127.0.0.1:1080") if err != nil { fmt.Print(err) } defer l.Close() for { conn, err := l.Accept() if err != nil { fmt.Print(err) } go handle(conn) } } func handle(conn net.Conn) { defer conn.Close() dialect, err := proxy.SOCKS5("tcp", "externalhost:externalport", nil, proxy.Direct) newConn, err := dialect.Dial("tcp", "targethost:targetport") if err != nil { log.Printf("Connection error: %s", err.Error()) } go func() { _, err = io.Copy(newConn, conn) if err != nil { log.Printf("Connection error: %s", err.Error()) } }() _, err = io.Copy(conn, newConn) if err != nil { log.Printf("Connection error: %s", err.Error()) } } func handle(conn net.Conn) { defer conn.Close() }
I need to get the destination address and verify the connection is socks5, then do a proxy using the external ip and pass it to dialect.dial
Sounds like you want this:
In this case, you just need a basic TCP proxy. Your tool does not need to look inside the socks5 request, nor does it need proxy.SOCKS5
to connect to the remote machine. You only want to forward all connections to the local endpoint to the remote endpoint.
Your current code will work for the most part, with the exception that you should use net.Dial
(instead of dialect.Dial
) to connect to "externalhost :externalport"
, and there is no need to create a proxy.SOCKS5
dialer.
The above is the detailed content of Using go's socks5 proxy. For more information, please follow other related articles on the PHP Chinese website!