sans io socks代理客户机/服务器,具有两个io后端
siosocks的Python项目详细描述
短袜
Sans-iosocks 4/5客户机/服务器库/框架。
原因
功能
- 仅tcp连接(无绑定,无udp)
- 客户机和服务器
- 袜子型号:4、4a、5
- socks5 auth:no auth,用户名/密码
- 两个io后端:asyncio、trio、socketserver
- 一次性SOCKS服务器(
python -m siosocks
)
许可证
siosocks
在wtfpl许可下提供。
要求
- Python3.6+
IO实现矩阵
Framework | Client | Server |
---|---|---|
asyncio | + | + |
trio | + | + |
socket | + |
随意放大:眨眼:
用法
最终用户实现模拟“父”库API。
客户机
仅限关键字的额外参数:
socks_host
:字符串socks_port
:整数socks_version
:整数(4或5)username
:可选字符串(默认值:None
)password
:可选字符串(默认值:None
)encoding
:可选字符串(默认值:"utf-8"
)socks4_extras
:可选字典socks5_extras
:可选字典
附加服务:
- 袜子4
user_id
:字符串(默认值:""
)
- 袜子5
- 目前没有,为统一api添加
服务器
最终用户实现模拟“父”库服务器请求处理程序。
您应该使用^{
allowed_versions
:整数集(默认值:{4, 5}
)username
:可选字符串(默认值:None
)password
:可选字符串(默认值:None
)strict_security_policy
:布尔值,如果True
需要身份验证且4在允许的版本集中,则将引发异常(默认值:True
)encoding
:可选字符串(默认值:"utf-8"
)
没什么好说的。典型用法可在^{
示例
高水平
本节将使用asyncio
作为后端,因为它是siosocks
的主要目标/原因
客户
importasynciofromsiosocks.io.asyncioimportopen_connectionHOST="api.ipify.org"REQ="""GET /?format=json HTTP/1.1Host: api.ipify.orgUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en,en-US;q=0.7,ru;q=0.3Accept-Encoding: gzip, deflateDNT: 1Connection: keep-aliveUpgrade-Insecure-Requests: 1Cache-Control: max-age=0"""asyncdefmain():# assume we have tor startedr,w=awaitopen_connection(HOST,80,socks_host="localhost",socks_port=9050,socks_version=5)w.write(REQ.replace("\n","\r\n").encode())awaitw.drain()print(awaitr.read(8192))w.close()loop=asyncio.get_event_loop()loop.run_until_complete(main())
服务器
importsocketimportasyncioimportcontextlibfrom.io.asyncioimportsocks_server_handlerloop=asyncio.get_event_loop()coro=asyncio.start_server(socks_server_handler,host=ns.host,port=ns.port,family=family)server=loop.run_until_complete(coro)addresses=[]forsockinserver.sockets:ifsock.familyin(socket.AF_INET,socket.AF_INET6):host,port,*_=sock.getsockname()addresses.append(f"{host}:{port}")print(f"Socks{socks_versions} proxy serving on {', '.join(addresses)}")withcontextlib.suppress(KeyboardInterrupt):loop.run_forever()
但如果您只需要一个Shot Socks服务器,请尝试:
python -m siosocks
这将在1080端口上的所有接口上启动SOCKS 4,5服务器。有关详细信息,请尝试--help
python -m siosocks --help usage: siosocks [-h][--backend {asyncio,socketserver,trio}][--host HOST][--port PORT][--family {ipv4,ipv6,auto}][--socks SOCKS][--username USERNAME][--password PASSWORD][--encoding ENCODING][--no-strict][-v] Socks proxy server optional arguments: -h, --help show this help message and exit --backend {asyncio,socketserver,trio} Socks server backend [default: asyncio] --host HOST Socks server host [default: None] --port PORT Socks server port [default: 1080] --family {ipv4,ipv6,auto} Socket family [default: auto] --socks SOCKS Socks protocol version [default: []] --username USERNAME Socks auth username [default: None] --password PASSWORD Socks auth password [default: None] --encoding ENCODING String encoding [default: utf-8] --no-strict Allow multiversion socks server, when socks5 used with username/password auth [default: False] -v, --version Show siosocks version
低水平
像client/server这样的暗影袜。暗影袜就像是建在袜子上的5和加密。它有“client”,实际上是socks服务器和“server”。所以,确切地说,有两个服务器:客户端和服务器端。shadowsocks的目的是加密“传入”和“传出”服务器之间的数据通常情况下,这看起来像:
client (non-encrypted socks) «incoming» socks server (encrypted socks) «outgoing» socks server (non-socks connection) target server
上面的例子使用凯撒密码是为了简单(当然还有安全性)。
路线图/贡献
- []添加更多后端(平均值)
- []加速
passthrough
实现(似乎很难)