Fast tcp/https/websocket/socks4/ssh tunnel serving as unified proxy server.
Project description
_____ _ _____ _
/__ \_ _ _ __| |__ ___/__ \_ _ _ __ _ __ ___| |
/ /\/ | | | '__| '_ \ / _ \ / /\/ | | | '_ \| '_ \ / _ \ |
/ / | |_| | | | |_) | (_) / / | |_| | | | | | | | __/ |
\/ \__,_|_| |_.__/ \___/\/ \__,_|_| |_|_| |_|\___|_|
环境要求
- 操作系统:
Windows
、Linux
、MacOS
- Python:
>=3.5
主要功能
- 提供访问各种不同代理服务的能力
- 目前支持的代理服务类型包括:
https
、socks4
、websocket
、ssh
- 目前可以创建的代理服务类型有:
https
、socks4
、websocket
- 还支持端口映射等非代理服务
- 支持通过配置文件的方式,指定不同的策略,允许使用不同的代理服务访问不同的目标服务
使用方法
安装方法
$ pip3 install turbo-tunnel
端口映射
$ turbo-tunnel -l tcp://127.0.0.1:8080 -t tcp://www.qq.com:443
该命令可以将www.qq.com
的443
端口到本地的8080
端口。
$ turbo-tunnel -l tcp://127.0.0.1:8080 -t http://web-proxy.com:8080 -t tcp://www.qq.com:443
该命令会通过https
类型的代理服务web-proxy.com:8080
,将www.qq.com
的443
端口到本地的8080
端口。
如果不写127.0.0.1
,则默认是0.0.0.0
。
创建代理服务
使用-l
或--listen
参数,可以创建代理服务。
- 创建 https 代理服务
$ turbo-tunnel -l http://username:password@:8080
username
和password
是用于鉴权的用户名和密码,不指定则不对客户端鉴权;如果包含特殊字符需要进行urlencode
。
- 创建 socks4 代理服务
$ turbo-tunnel -l socks4://userid@127.0.0.1:1080
socks4://
也可以写成socks://
,表示默认使用socks4
协议。
userid
参数用于鉴权,不指定则无需鉴权。
- 创建 WebSocket 代理服务
$ turbo-tunnel -l ws://username:password@127.0.0.1/{addr}/{port}
{addr}
和{port}
在这里是变量占位符,用于指示目标地址
和目标端口
参数。这是因为WebSocket
协议本身并不是一种代理协议,因此需要使用特定的字段来描述这些信息。运行过程中,当需要访问1.1.1.1:8888
服务时,客户端会动态生成请求路径:/1.1.1.1/8888
。
这里可以根据自己的需要改成不同的格式,例如:/proxy-{addr}-{port}
。但是,这里设置的格式需要与客户端指定的 url 格式一致。
目前没有提供wss
协议,用户如果需要的话可以配合nginx
搭建。
指定访问通道
通过-t
或--tunnel
参数,可以指定访问目标服务器的通道,默认是直连。
- 配置单个通道
$ turbo-tunnel -l http://127.0.0.1:8080 -t wss://username:password@proxy.com/{addr}/{port}
所有访问本地 https 代理服务的请求都会通过WebSocket
代理服务进行转发。
这种方法可以用作代理协议格式的转换。
- 配置多个通道
$ turbo-tunnel -l http://127.0.0.1:8080 -t socks://10.1.1.1:1080 -t ssh://username:password@10.2.2.2:22
配置多个通道时,会进行代理协议的嵌套,从而依次穿越所有通道,进行目标服务的访问。
设置全局透明代理
创建代理服务后,我们希望程序访问网络时能自动使用代理去访问。此时可以通过配置全局透明代理的方式来解决。
-
Windows & MacOS 可以安装
Proxifier
工具,该工具可以配置各种访问策略,访问不同服务时使用不同的代理服务器。 -
Liunx 可以使用
proxychains
工具,该工具类似于Proxifier
,但是不能配置策略,而且需要在启动目标应用时在命令前增加proxychains
前缀。
高级用法
使用配置文件
-c
或--config
参数可以指定一个yaml
格式的配置文件,可以配置服务参数访问策略。下面是一个配置文件的例子:
version: 1.0
listen: http://127.0.0.1:6666 # 配置监听地址
tunnels:
- id: direct
url: tcp://
default: true # 默认使用直连策略
- id: block
url: block:// # 禁止访问策略
- id: web
url: http://web-proxy.com:8080
- id: private
url: wss://test:mypassword@ws-proxy.com/proxy/{addr}/{port}
dependency: web # 依赖web代理
rules:
- id: local
priority: 100 # 优先级,1-100,策略冲突时会选择优先级最高的策略
addr: 127.0.0.1
tunnel: direct
- id: internal
priority: 99
addr: "192.168.*"
port: 1-65535
tunnel: direct
- id: public
priority: 90
addr: "*"
port: 80;443;8080
tunnel: web # 访问外网使用web通道
- id: private
priority: 95
addr: "*.private.com"
port: 1-65535
tunnel: private
- id: test
priority: 90
addr: "*.baidu.com"
port: 80;443
tunnel: block # 不允许访问
扩展插件
turbo-tunnel 允许用户开发自己的插件,以支持新的代理服务或通道类型,还可以在运行过程中执行特殊操作,例如:动态修改收发的数据。
目前自带的插件有:
- terminal: 展示运行过程中的连接情况
$ turbo-tunnel -l http://127.0.0.1:8080 -p terminal -p xxx
通过-p
或--plugin
可以指定1-N
个插件,插件加载顺序由启动命令行中-p
参数的顺序决定。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file turbo-tunnel-0.9.0.tar.gz
.
File metadata
- Download URL: turbo-tunnel-0.9.0.tar.gz
- Upload date:
- Size: 31.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff2971ceddfbe4476283b5e33e80b0851c58a3f998ec7a54b85b49382314fa3b |
|
MD5 | 47f7eedd74fc13454103210edc0331bd |
|
BLAKE2b-256 | ca161915222c9ccbb1bce1bfd4d92a298ef5d8638576e89093958bdac34ed24c |
File details
Details for the file turbo_tunnel-0.9.0-py3-none-any.whl
.
File metadata
- Download URL: turbo_tunnel-0.9.0-py3-none-any.whl
- Upload date:
- Size: 34.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2e0505af5d8f9571eef08957dafc09a39daab195625a995f01fdad9c96490a8 |
|
MD5 | ba0a123c61fd0afd0f17f7bd83dc86b4 |
|
BLAKE2b-256 | e6f861c9c6a8f92368707e478b35e1fc3e410691eb8b82a4a76b9bee002e2e07 |