SOCKS4、SOCKS4A和SOCKS5的SansI/O实现。
socksio的Python项目详细描述
索克西奥
客户端sans-I/O SOCKS代理实现。 支持插座4、插座4A和插座5。在
socksio
是一个sans-I/O库,类似于
^{
现状:稳定
尚未实现的功能:
- SOCKS5 GSS-API身份验证。在
- SOCKS5 UDP关联请求。在
使用
作为sans-I/O意味着为了测试socksio
,您需要一个I/O库。
当然,最基本的I/O是标准库的socket
模块。在
您需要提前知道要连接的SOCKS代理的类型 到。假设我们的机器上8080端口上有一个SOCKS4代理,我们 将首先创建与它的连接:
importsocketsock=socket.create_connection(("localhost",8080))
socksio
公开SOCKS4、SOCKS4A和SOCKS5的模块,每个模块包括
一个Connection
类:
由于socksio
是一个sans-I/O库,我们将使用套接字发送和
接收数据到我们的SOCKS4代理。但是,将创建原始数据并
由我们的SOCKS4Connection
解析。在
我们需要告诉我们的连接我们想向代理发出请求。我们有 首先创建一个请求对象。在
在SOCKS4中,我们只需要发送一个命令以及一个IP地址和端口。
socksio
将不同类型的命令公开为可枚举数和
方便from_address
类方法在请求类中创建
有效的请求对象:
# SOCKS4 does not allow domain names, below is an IP for google.comrequest=socks4.SOCKS4Request.from_address(socks4.SOCKS4Command.CONNECT,("216.58.204.78",80))
from_address
方法可用于socksio
中的所有请求类,它们
接受地址为(address, port)
的元组以及字符串address:port
。在
现在我们请求连接发送我们的请求:
conn.send(request)
然后,SOCKS4Connection
将在适当的
我们发送给代理人的格式:
data=conn.data_to_send()sock.sendall(data)
如果一切顺利,代理将发送回复,我们只需阅读
套接字并将数据传递给SOCKS4Connection
:
data=sock.recv(1024)event=conn.receive_data(data)
连接将解析数据并从中返回一个事件,在本例中为
SOCKS4Reply
其中包含SOCKS回复中字段的属性:
ifevent.reply_code!=socks4.SOCKS4ReplyCode.REQUEST_GRANTED:raiseException("Server could not connect to remote host: {}".format(event.reply_code))
如果一切顺利的话,我们可以建立正确的联系 开始直接向代理发送请求:
sock.sendall(b"GET / HTTP/1.1\r\nhost: google.com\r\n\r\n")data=receive_data(sock)print(data)# b'HTTP/1.1 301 Moved Permanently\r\nLocation: http://www.google.com/...`
所有协议都使用相同的方法,检查 examples directory 了解更多信息。在
发展
使用pip install -r test-requirements.txt
安装测试要求。在
使用flit install -s
以伪可编辑模式安装项目。在
可以直接调用pytest
来运行测试。在
此项目使用^{nox
作为测试要求的一部分进行安装。
调用nox
将运行所有会话,但您也可能只运行其中的一些会话,对于
示例nox -s lint
将只运行linting会话。在
为了在实时代理服务器上进行测试,我们提供了基于
在^{
容器将启动danted
监听端口1080。码头工人-合成.yml
将启动容器并相应地映射端口。启动容器
在背景中:
docker-compose -f docker/docker-compose.yml up -d
要阻止它:
docker-compose -f docker/docker-compose.yml down
或者,删除-d
标志以在前台运行容器。在
参考文件
每个实施都遵循以下文件:
- 袜子4:https://www.openssh.com/txt/socks4.protocol
- 插座4a:https://www.openssh.com/txt/socks4a.protocol
- 袜子5:https://www.ietf.org/rfc/rfc1928.txt
- SOCKS5用户名/密码验证:https://www.ietf.org/rfc/rfc1929.txt
- {gsa5-sock验证^s}
许可证
麻省理工学院
- 项目
标签: