|
以前用ngrok总觉得非常麻烦,又要编译又要安装证书。
而且经常莫名其妙断开。
后来自己用Python自己写了个支持TCP穿透的工具。
Feature:
- 使用简单,双端只要有Python3.8以上就可以直接运行。
- 轻量级,用了asyncio实现协程,资源使用极低,使用一个TCP连接的情况下客户端内存占用仅仅12.6M
- 比较稳定,支持断线自动重连。服务器进程常驻。
- 多用户,一个客户端支持多个TCP端口穿透。一个服务器端支持多个客户端,互不影响。
- 可能有未知bug,小孩子不懂,写着玩的。
项目地址:
https://github.com/zgxkbtl/Alley
使用方法:
以反代出本地的3389端口为例。
3389是Windows远程桌面的服务端口。
由于NAT的限制,无法直接连接家庭PC的网络。
这里将本地3389代理到公网IP上的21354 。
通过访问21354可以连接本地PC的远程桌面。
1. 在公网服务器上启动 server.py,默认会监听9876端口,不用输入任何参数。
出现上图的字样代表启动成功。
如果出现其他字样代表可能除了一些问题,具体是什么我也不知道,欢迎反馈。
2. 在本地启动client.py
- python .\client.py --host '127.0.0.1'
复制代码 这里127.0.0.1应该填写公网服务器的IP地址。
成功后在client端应该会显示:
- ('127.0.0.1', 9876)
- 2022-03-21 23:22:47,275 - proactor_events.py[line:623] - DEBUG: Using proactor: IocpProactor
- 2022-03-21 23:22:47,278 - client.py[line:101] - INFO: {"type": "CONNECTOR", "local_addr": "127.0.0.1", "local_port": "3389", "remote_addr": "0.0.0.0", "remote_port": "21354"}
复制代码
而在server端应该会显示:
- INFO:root:Alley server listening on ('0.0.0.0', '9876')
- DEBUG:asyncio:Using proactor: IocpProactor
- INFO:root:Received '{"type": "CONNECTOR", "local_addr": "127.0.0.1", "local_port": "3389", "remote_addr": "0.0.0.0", "remote_port": "21354"}' from ('127.0.0.1', 7783)
- INFO:root:{"type": "CONNECTOR", "local_addr": "127.0.0.1", "local_port": "3389", "remote_addr": "0.0.0.0", "remote_port": "21354"}
- INFO:root:listening endpoint on : ('0.0.0.0', '21354')
- INFO:root:ping
- INFO:root:ping
- INFO:root:ping
- INFO:root:ping
- INFO:root:ping
- INFO:root:ping
复制代码
3. 接着可以测试连接是否正常了
其他:
可以在client的代码中更改这一部分。
按照格式定义本地的端口和服务器的端口即可。
- async def run():
- messages = [
- {
- 'type': "CONNECTOR",
- 'local_addr':'127.0.0.1',
- 'local_port':'3389',
- 'remote_addr':'0.0.0.0',
- 'remote_port':'21354'
- },
- ]
复制代码
|
|