SANS-I/O实现SOCKS4、SOCKS4A和SOCKS5。
项目描述
SOCKSIO
客户端无I/O SOCKS代理实现。支持SOCKS4、SOCKS4A和SOCKS5。
socksio
是一个类似于h11
或h2
的无I/O库,这意味着库本身不处理通过网络发送字节的实际操作,它只处理SOCKS协议的实现细节,因此您可以在任何您想要的I/O库中使用它。
当前状态:稳定
尚未实现的功能
- SOCKS5 GSS-API身份验证。
- SOCKS5 UDP关联请求。
使用方法
TL;DR 查看示例目录 examples。
无I/O意味着为了测试socksio
,您需要一个I/O库。最基本的I/O当然是标准库的socket
模块。
您需要提前知道您想连接的SOCKS代理类型。假设我们在本地机器上的8080端口运行一个SOCKS4代理,我们将首先创建一个连接到它的连接
import socket
sock = socket.create_connection(("localhost", 8080))
socksio
公开了SOCKS4、SOCKS4A和SOCKS5的模块,每个模块都包含一个Connection
类
from socksio import socks4
# The SOCKS4 protocol requires a `user_id` to be supplied.
conn = socks4.SOCKS4Connection(user_id=b"socksio")
由于 socksio
是一个无-I/O 库,我们将使用套接字向我们的 SOCKS4 代理发送和接收数据。然而,原始数据将由我们的 SOCKS4Connection
创建和解析。
我们需要告诉我们的连接我们想要向代理发送请求。我们首先创建一个请求对象来实现这一点。
在 SOCKS4 中,我们只需要发送一个命令以及一个 IP 地址和端口。 socksio
在请求类中公开了不同类型的命令作为枚举,以及在请求类中的方便的 from_address
类方法来创建有效的请求对象。
# SOCKS4 does not allow domain names, below is an IP for google.com
request = socks4.SOCKS4Request.from_address(
socks4.SOCKS4Command.CONNECT, ("216.58.204.78", 80))
from_address
方法在 socksio
的所有请求类中都是可用的,它们接受地址作为 (address, port)
的元组,以及字符串 address:port
。
现在我们要求连接发送我们的请求
conn.send(request)
SOCKS4Connection
将随后为我们组装必要的 bytes
数据,以正确的格式发送到我们的代理
data = conn.data_to_send()
sock.sendall(data)
如果一切顺利,代理将发送回复,我们只需要从套接字读取并将数据传递给 SOCKS4Connection
data = sock.recv(1024)
event = conn.receive_data(data)
连接将解析数据并从中返回一个事件,在这种情况下,一个包含 SOCKS 回复字段属性的 SOCKS4Reply
if event.reply_code != socks4.SOCKS4ReplyCode.REQUEST_GRANTED:
raise Exception(
"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/...`
所有协议都使用相同的方法,有关更多信息,请参阅 示例目录
开发
使用 pip install -r test-requirements.txt
安装测试需求。
使用 flit install -s
以伪可编辑模式安装项目。
可以直接调用 pytest
运行测试。
该项目使用 nox
来自动化测试和 linting 任务。 nox
作为测试需求的一部分被安装。调用 nox
将运行所有会话,但您也可以只运行其中的一些,例如,nox -s lint
将只运行 linting 会话。
为了测试一个实际的代理服务器,提供了一个基于 Dante
SOCKS 服务器的 Docker 设置。
将启动一个容器,其中 danted
监听 1080 端口。docker-compose.yml 将启动容器并适当地映射端口。要后台启动容器
docker-compose -f docker/docker-compose.yml up -d
要停止它
docker-compose -f docker/docker-compose.yml down
或者,移除 -d
标志以在前台运行容器。
参考文档
每个实现都遵循以下列出的文档
- SOCKS4: https://www.openssh.com/txt/socks4.protocol
- SOCKS4A: https://www.openssh.com/txt/socks4a.protocol
- SOCKS5: https://www.ietf.org/rfc/rfc1928.txt
- SOCKS5 用户名/密码认证: https://www.ietf.org/rfc/rfc1929.txt
- SOCKS5 GSS-API 认证: https://www.ietf.org/rfc/rfc1961.txt
许可证
MIT
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
socksio-1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac |
|
MD5 | c842dbff834af52dd070ecf297a14337 |
|
BLAKE2b-256 | f85c48a7d9495be3d1c651198fd99dbb6ce190e2274d0f28b9051307bdec6b85 |
socksio-1.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 |
|
MD5 | 6b09624a9e8740cec66d5e098e14870b |
|
BLAKE2b-256 | 37c36eeb6034408dac0fa653d126c9204ade96b819c936e136c5e8a6897eee9c |