Go 语言的实战案例 SOCKS5 代理 | 青训营
摘要
Title: Go 语言的实战案例 SOCKS5 代理 | 青训营
Tag: ByteDance、Go、后端
Powered by:NEFU AB-IN
Go 语言的实战案例 SOCKS5 代理 | 青训营
- GO语言工程实践课后作业:实现思路、代码以及路径记录
引入
代理是指在计算机网络中,代理服务器充当客户端和目标服务器之间的中介。它接收来自客户端的请求,然后将请求转发给目标服务器,再将目标服务器的响应返回给客户端。
用途:
-
匿名浏览:Socks5代理可以隐藏客户端的真实IP地址,使得客户端在访问目标服务器时更加匿名。可以代表客户端向其他服务器发送请求
- 在网络爬虫中,使用代理服务器可以解决IP访问频率限制问题,因为它们可以隐藏真实的客户端IP地址并提供新的IP地址来进行请求,从而减轻对单个IP的访问频率限制。这样,爬虫就可以通过多个代理IP来轮流发送请求,避免被目标服务器封禁。
-
数据加密:Socks5代理支持对数据流进行加密传输,提供更高的数据安全性。
-
跨协议代理:Socks5代理不仅支持HTTP协议,还支持包括FTP、SMTP等在内的多种协议,实现了更广泛的应用场景。
-
穿越防火墙:由于Socks5代理更通用,不受网络防火墙的限制,可以更容易地穿越网络防火墙,访问被封锁或限制的资源。
Socks5代理是一种代理协议,用于在网络上进行数据传输。Socks5代理服务器可以支持多种协议的代理,包括HTTP、FTP、SMTP等。与HTTP代理相比,Socks5代理更加灵活和通用。
主要区别如下:
- HTTP代理:主要用于HTTP请求,支持浏览器的代理设置,透明代理
- Socks5代理:支持HTTP以外的其他协议的代理,不支持浏览器的代理设置,需要在应用程序中设置代理,Socks5代理的主要特点是它可以在客户端和代理服务器之间建立一个 TCP 或 UDP 连接,并直接将数据转发给目标服务器,而不需要解析或修改数据包。这种特性使得SOCKS5代理适用于很多不同类型的网络应用,如 P2P 文件共享、实时视频传输等。
代理过程通常如下:
- 客户端向代理服务器发送连接请求,并指定目标服务器的地址。
- 代理服务器接收到请求后,解析目标服务器地址,并建立与目标服务器的连接。
- 代理服务器将客户端的请求转发给目标服务器。
- 目标服务器接收到请求后,处理请求并生成响应。
- 代理服务器将目标服务器的响应转发给客户端。
- 客户端接收到代理服务器返回的响应,并进行处理。
总的来说,代理服务器充当了客户端和目标服务器之间的中转站,使得客户端能间接与目标服务器进行通信,提供了更多的隐私保护和功能扩展。
TCP echo server
1 | /* |
auth 认证
认证阶段:实现auth函数,更改process函数,里面用到auth函数
1 | /* |
请求阶段
请求阶段:实现connect函数,签名一致,在process中调用
1 | package main |
relay阶段
relay阶段:最后一步,真正和服务器建立TCP连接,在 connect
函数中,增加功能
1 | package main |
ctx, cancel := context.WithCancel(context.Background())
解释:
-
上下文对象是 Go 语言中用于跨 goroutine 传递请求的值、截止时间以及取消信号的一种机制。它可以用来解决在并发环境下协调多个 goroutine 之间的操作和通信的问题。
-
上下文对象通常用于以下几种情况:
- 传递请求的相关值:例如请求ID、用户信息等,在多个 goroutine 之间共享。
- 设置截止时间:对某些操作设置一个超时时间,用于控制操作的执行时间。
- 取消信号:当一个操作出现问题或者不再需要执行时,可以通过取消上下文对象来通知相关的 goroutine 停止执行。
-
context.WithCancel(context.Background()) 这句代码的意思是创建一个具有取消功能的上下文对象(WithCancel()函数接受一个 Context 并返回其子Context和取消函数cancel)。context.Background() 创建一个根上下文对象,而 context.WithCancel 则基于根上下文对象创建一个新的上下文对象,该上下文对象具有取消功能。返回的 ctx 和 cancel 是用于取消该上下文对象的函数。
-
所以这句代码的作用就是创建一个新的上下文对象 ctx,并使用 context.WithCancel 函数将其绑定到一个取消函数 cancel 上。这样可以通过调用 cancel 函数来取消该上下文对象的执行。该上下文对象可以被传递给其他需要依赖上下文的 goroutine 来实现协作和取消的功能。