SOCKS4、SOCKS4A和SOCKS5的SansI/O实现。

socksio的Python项目详细描述


索克西奥

Build StatuscodecovSupported Python VersionsPyPI

客户端sans-I/O SOCKS代理实现。 支持插座4、插座4A和插座5。在

socksio是一个sans-I/O库,类似于 ^{}^{},这意味着库本身 不处理通过网络实际发送的字节,它只是 处理SOCKS协议的实现细节,以便您可以使用 它在任何你想要的I/O库中。在

现状:稳定

尚未实现的功能:

  • SOCKS5 GSS-API身份验证。在
  • SOCKS5 UDP关联请求。在

使用

检查examples directory。在

作为sans-I/O意味着为了测试socksio,您需要一个I/O库。 当然,最基本的I/O是标准库的socket模块。在

您需要提前知道要连接的SOCKS代理的类型 到。假设我们的机器上8080端口上有一个SOCKS4代理,我们 将首先创建与它的连接:

importsocketsock=socket.create_connection(("localhost",8080))

socksio公开SOCKS4、SOCKS4A和SOCKS5的模块,每个模块包括 一个Connection类:

^{pr2}$

由于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会话。在

为了在实时代理服务器上进行测试,我们提供了基于 在^{}SOCKS服务器上。在

容器将启动danted监听端口1080。码头工人-合成.yml 将启动容器并相应地映射端口。启动容器 在背景中:

docker-compose -f docker/docker-compose.yml up -d

要阻止它:

docker-compose -f docker/docker-compose.yml down

或者,删除-d标志以在前台运行容器。在

参考文件

每个实施都遵循以下文件:

许可证

麻省理工学院

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
为@Nonnull注释参数编写java单元测试   对于JAVA,如何从它自己的类调用插入排序来将数组分类到一个单独的类中?   Java中嵌套SQL查询的字符串解析   java在所有带有特定注释的方法上调用带注释的方面   在Java中将base64转换为PDF   无法在Android上强制转换java getApplicationContext()   雅加达ee Java ee:如何获取我的应用程序的URL?   IntelliJ:如何导入的文件夹。java文件作为库?   多线程Java(FX)在播放一种声音的同时,播放另一种声音   网络爬虫我需要将proto3版本中protobuf生成的java代码添加到nutch 1.7中   使用JAXRS注释资源的java Restlet客户端   java如何查找给定月份的日期范围   java Minecraft Bukkit插件:我的小游戏传送机不工作   Java Excel搜索和数组列表工作不正常