一个蟒蛇袜客户端模块。See https://github.com/anrov/pysocks for more information.
PySocks的Python项目详细描述
短袜
pysocks允许您通过socks和http代理服务器发送流量。它是一个现代化的分支,具有bug修复和额外功能。
作为插座模块的替代品。通过调用socket_object.set_proxy()
,无缝地为任何socket对象配置socks代理
状态更新
我再也没有时间积极地做这个项目了。我很乐意接受深思熟虑的请求,并继续在这里和pypi上更新以响应prs,但除了版本冲突之外,我不会对自己进行任何更改。如果有人想把这个项目从我手里拿开,请给我发电子邮件或是制造一个问题。谢谢,
功能
- 适用于Python2.7和3.4+的SOCKS代理客户端
- TCP和UDP都受支持
- 包括但不受支持或推荐的http代理客户端(您应该使用urllib2或requests自己的http代理接口)
- 包含urllib2处理程序。
pip install
/setup.py install
将自动安装sockshandler
模块。
安装
pip install PySocks
或者下载tarball/git克隆
和…
python setup.py install
它们将同时安装socks
和sockshandler
模块。
或者,在您的项目中只包含socks.py
。
警告:pysocks/socksipy仅支持使用连接隧道的http代理。某些http代理可能无法使用此库。如果您希望使用http(而不是socks)代理,建议您改用http客户端的本地代理支持(proxies
dict表示requests
,或urllib2.proxyhandler
表示urllib2
)。
用法
socks.socksocket
import socks
s = socks.socksocket() # Same API as socket.socket in the standard lib
s.set_proxy(socks.SOCKS5, "localhost") # SOCKS4 and SOCKS5 use port 1080 by default
# Or
s.set_proxy(socks.SOCKS4, "localhost", 4444)
# Or
s.set_proxy(socks.HTTP, "5.5.5.5", 8888)
# Can be treated identical to a regular socket object
s.connect(("www.somesite.com", 80))
s.sendall("GET / HTTP/1.1 ...")
print s.recv(4096)
MonkeyPatching
要使用单个默认代理修补整个标准库:
import urllib2
import socket
import socks
socks.set_default_proxy(socks.SOCKS5, "localhost")
socket.socket = socks.socksocket
urllib2.urlopen("http://www.somesite.com/") # All requests will pass through the SOCKS proxy
请注意,MonkeyPatching可能不适用于所有标准模块或所有第三方模块,通常不建议使用。monkeypatching在python中通常是一种反模式。
urllib2处理程序
带有sockshandler
urllib2处理程序的示例用例。注意,您必须同时导入socks
和socks handler
,因为处理程序是它自己的模块,独立于pysocks。模块包含在PYPI包中。
import urllib2
import socks
from sockshandler import SocksiPyHandler
opener = urllib2.build_opener(SocksiPyHandler(socks.SOCKS5, "127.0.0.1", 9050))
print opener.open("http://www.somesite.com/") # All requests made by the opener will pass through the SOCKS proxy
原始Socksipy自述文件附在下面,经过修改以反映API更改。
短袜
一个python socks模块。
(c)2006年,丹·海姆。保留所有权利。
有关详细信息,请参见许可证文件。
什么是袜子代理?< /P> SOCKS代理是TCP级别的代理服务器。换句话说,它的作用是
一条隧道,在不改变它的情况下,把所有通过它的交通都传送出去。
socks代理可以使用任何
使用TCP。 什么是袜子?< /P> 这个python模块允许您通过socks创建tcp连接
没有任何特别努力的代理。
它还支持通过socks5代理中继udp数据包。 代理兼容性
Socksipy与三种不同类型的代理兼容: 系统要求
socksipy是用python编写的,可以在任何有python的平台上运行
解释器和TCP/IP支持。
这个模块已经用Python2.3测试过了,应该可以使用更高版本
也一样。 只需将文件"socks.py"复制到python的 socks模块提供一个名为socksocket的类,它是模块所有功能的基础。 对象的初始化参数与普通套接字相同
对象以确保最大的兼容性,但是需要注意的是, socksocket对象有一个非常类似于socket的接口(实际上
参数说明: 用法示例: 调用set_proxy方法后,只需使用
通过代理建立连接的传统参数: 连接需要更长的时间才能允许与代理服务器进行协商。
请注意,在不调用 错误:连接过程中的任何错误都将触发异常。例外情况
可能由底层套接字层生成,也可能是自定义模块
例外情况,其详细信息如下: 类 所有proxyerror异常都有一个属性,该属性将包含
捕获到 类 class class class 类 建立连接后,对象的行为类似于标准套接字。 像 除了socksocket类之外,还有一个值得一提的函数是
请在https://github.com/anorov/pysocks" rel="nofollow">https://github.com/anorov/pysocks上打开一个github问题安装
lib/site packages
目录,
你已经准备好出发了。[编者按:最好对pysocks使用python setup.py install
用法
第一级L用命令加载SOCKS模块:>>> import socks
>>>
socksocket
仅在family为af_inet
时才起作用,并且
类型为sock_stream
或sock_dgram
。
通常,最好在没有参数的情况下初始化socksocket
对象
>>> s = socks.socksocket()
>>>
socksocket
类是从socket派生的)还有一些额外的方法。
要选择要使用的代理服务器,请使用
语法为:set_proxy(proxy_type, addr[, port[, rdns[, username[, password]]]])
代理服务器类型
-代理服务器的类型。这可能是三种可能性之一
选项:proxy_type_socks4
,proxy_type_socks5
和proxy_type_http
对于socks4,
socks5和http服务器。socks4
、socks5
和http
都是别名。addr
-代理服务器的IP地址或DNS名称。端口
-代理服务器的端口。socks默认为1080,http默认为8080。rdns
-这是一个布尔标志,用于修改有关dns解析的行为。
如果设置为true,则将在服务器上远程执行DNS解析。
如果设置为false,则将在本地执行dns解析。请注意
在socks4服务器实际使用协议扩展时,将其设置为true,
称为socks4a,可能不是所有服务器(socks5和http服务器)都支持它
始终支持DNS)。默认值为true。用户名
-对于socks5服务器,这允许简单的用户名/密码身份验证
在服务器上。对于socks4服务器,此参数将作为用户标识发送。
如果正在使用http服务器,则忽略此参数。如果没有提供,
将不使用身份验证(服务器可能接受未经身份验证的请求)。password
-此参数仅对socks5服务器有效,并指定
所提供用户名的相应密码。>>> s.set_proxy(socks.SOCKS5, "socks.example.com") # uses default port 1080
>>> s.set_proxy(socks.SOCKS4, "socks.test.com", 1081)
0
pip install PySocks
set_proxy
的情况下调用connect将连接
没有代理(就像普通的套接字一样)。proxyerror
-这是一个基本异常类。不是直接提出,而是
相反,此模块引发的所有其他异常类都是从它派生的。
这允许一种简单的方式捕获所有与代理相关的错误。它从ioerror
套接字。错误
异常,或者如果没有异常,则为无
。generalProxyerRor
-当抛出时,它表示一个问题没有落下
进入另一个类别。发送的数据无效
-此错误表示从
服务器。最常见的原因是指定为代理的服务器是
不是真正的socks4/socks5/http代理,或者指定的代理类型可能是错误的。连接意外关闭-代理服务器意外地关闭了连接。
这可能表示代理服务器遇到网络或软件问题。
错误的代理类型
-如果提供给
set_proxy函数不是socks4
/socks5
/http
错误输入
-如果使用错误输入调用connect()
方法,则会引发此问题
参数。socks5autherror
-这表示通过socks5服务器的连接
由于身份验证问题而失败。需要身份验证
-如果使用socks5服务器
需要身份验证而不提供用户名/密码。所有提供的身份验证方法都被拒绝
-如果代理
需要此模块不支持的特殊身份验证方法。用户名未知或密码无效
-自我描述。socks5error
-对于与
身份验证。
参数是一个包含代码的元组,如服务器所示,
以及
错误。根据RFC,可能的错误是:0x01
-一般SOCKS服务器故障-如果由于任何原因,代理服务器无法
完成您的请求(内部服务器错误)。0x02
-规则集不允许连接-如果您试图连接到的地址
在服务器上被列入黑名单或需要身份验证。0x03
-无法访问网络-无法联系目标。网络上的路由器
已回复一个目标网络无法访问的错误。0x04
-无法访问主机-无法联系目标。网络上的路由器
已答复一个目标主机无法访问的错误。0x05
-连接被拒绝-目标服务器已主动拒绝连接
(请求的端口已关闭)。0x06
-ttl expired-从代理到目标服务器的syn数据包的ttl值
已经过期。这通常意味着有网络问题导致数据包
在路由器到路由器的"乒乓球"中捕获。0x07
-不支持命令-例如,如果服务器不支持udp。0x08
-不支持地址类型-客户端提供的地址类型无效。
使用此模块时,不应出现此错误。socks4error
-这将针对socks4错误引发。参数是元组
包含服务器给出的代码和错误描述。这个
根据规范,可能的错误是:0x5b
-请求被拒绝或失败-将在任何
其次是另外两个原因。0x5c
-请求被拒绝,因为SOCKS服务器无法连接到客户端上的IDENT-
SOCKS服务器试图在您的计算机上查找标识,但失败。在这
案例您应该运行一个identid服务器和/或配置防火墙以允许传入
从远程服务器连接到本地端口113。0x5d
-请求被拒绝,因为客户端程序和ident报告不同的用户id-
socks服务器在您的计算机上执行了一个ident查找,并收到一个
与您提供的用户名不同。更改您的用户名(通过
设置代理方法的用户名参数)以匹配并重试。httperror
-这将针对http错误引发。消息将包含
http状态代码和提供的错误消息。settimeout()
的行为应该与常规套接字一样。
调用close()
方法关闭连接。设置默认代理
函数。参数与set_proxy
方法相同。
此函数将为新创建的socksocket
对象设置默认代理设置,
其中,代理设置未通过set_proxy
方法更改。
如果您希望强制第三方模块使用SOCKS代理,这非常有用,
重写套接字对象。
例如:
1
pip install PySocks
问题
推荐PyPI第三方库