sayan9168/AsyncNetTools
GitHub: sayan9168/AsyncNetTools
一套基于 Python asyncio 的零依赖网络工具集,提供带流量混淆的 SOCKS5 代理和用于 NAT 穿透的多路复用反向隧道。
Stars: 0 | Forks: 0
# AsyncNetTools: Python 网络工具套件
一组轻量级、异步且**零依赖**(仅使用标准库)的 Python 网络工具,专为安全的远程基础设施管理、NAT 穿透和绕过受限的网络中间盒而设计。
## 📑 概述
本仓库包含两个完全使用 Python 的 `asyncio` 和标准库构建的主要网络实用工具。无需 `pip install`!
1. **混淆 SOCKS5 代理:** 一个自定义的 SOCKS5 代理,将流量封装在轻量级的 XOR 混淆层中。这可以防止中间盒和 DPI (Deep Packet Inspection) 系统误判或拦截标准的 SOCKS5 握手。
2. **多路复用反向隧道 (NAT 穿透):** 一个类似于 `ssh -R` 的反向端口转发实用工具。它允许位于严格 NAT/防火墙后面的内部 agent,通过基于单个持久 TCP 连接的自定义多路复用帧协议,将本地服务暴露给公共中继服务器。
## 🚀 功能
### 1. 混淆 SOCKS5 网关
* **标准 SOCKS5 支持:** 处理标准的无认证握手和 CONNECT 命令。
* **流量混淆:** 实现轻量级的 XOR 字节置换层,以破坏协议特征。
* **高性能:** 完全使用 `asyncio.start_server` 实现异步。
* **双端支持:** 包含远程网关(服务端)和本地监听器(客户端)脚本。
### 2. 反向隧道与 NAT 穿透
* **自定义多路复用:** 实现 9 字节帧协议(Channel ID、Length、Msg Type),在单个控制通道上多路复用数百个并发 TCP 流。
* **弹性连接:** 内置 keep-alive 心跳机制,防止 NAT 表超时。
* **自动重连:** 如果网络断开,内部 agent 会自动重新连接到中继服务器。
* **平稳退出:** 优雅地处理损坏的 socket,并确保所有虚拟通道都被正确关闭。
## 📂 项目结构
```
.
├── README.md
├── .gitignore
├── LICENSE
├── socks5_proxy/
│ ├── remote_gateway.py # Server-side obfuscated SOCKS5 proxy
│ └── local_listener.py # Client-side obfuscated SOCKS5 listener
└── reverse_tunnel/
├── relay_server.py # Public-facing relay server
└── internal_agent.py # Internal NAT-traversal agent
```
## 🛠️ 前置条件
* **Python 3.8+**(使用 `asyncio.run()` 和 `asyncio.wait_for()` 等 `asyncio` 特性)。
* **无外部依赖。**(仅使用 `asyncio`、`socket`、`struct`、`logging`)。
## 💻 使用说明
### 运行混淆 SOCKS5 代理
1. **启动远程网关**(在您的公共/边缘服务器上):
```
python socks5_proxy/remote_gateway.py
```
2. **启动本地监听器**(在您的本地工作站上):
*将脚本内的 `PROXY_HOST` 更新为您服务器的 IP。*
```
python socks5_proxy/local_listener.py
```
3. **配置您的工具**(浏览器、SSH 等)以使用 `127.0.0.1:8080` 作为 SOCKS5 代理。
### 运行反向隧道 (NAT 穿透)
1. **启动本地测试服务**(在您的内部机器上):
```
python -m http.server 8080
```
2. **启动中继服务器**(在您的公共 VPS 上):
```
python reverse_tunnel/relay_server.py
```
3. **启动内部 Agent**(在位于 NAT 后的内部机器上):
*将脚本内的 `RELAY_HOST` 更新为您 VPS 的 IP。*
```
python reverse_tunnel/internal_agent.py
```
4. **从任何地方访问内部服务**:
```
curl http://:8000
```
## 🧠 架构深度解析
### 反向隧道中的多路复用是如何工作的
原始 TCP 是一个连续的字节流。为了在一个 TCP socket 上运行多个独立的连接,`reverse_tunnel` 脚本使用了**自定义帧协议**:
| 字段 | 大小 | 描述 |
| :--- | :--- | :--- |
| **Channel ID** | 4 字节 | 标识虚拟电路的唯一整数(`0` 用于控制)。 |
| **Payload Length** | 4 字节 | 传入数据负载的大小。 |
| **Message Type** | 1 字节 | 操作类型(`DATA`、`NEW_CONN`、`CLOSE`、`HEARTBEAT`)。 |
| **Payload** | N 字节 | 实际的 TCP 数据或控制参数。 |
这允许中继服务器将传入的公共流量路由到正确的内部本地连接,而不会发生数据交错。
## 📜 许可证
本项目基于 **sayanoxv1.1** 许可证授权。
有关使用、分发和修改的详细信息,请参阅 [LICENSE](LICENSE) 文件。
## 📞 联系方式与作者
由 **Sayan** 开发和维护。欢迎随时联系以进行合作、提问或获取企业支持。
* 📧 **电子邮件:** [sm6881164@gmail.com](mailto:sm6881164@gmail.com)
* 🐙 **GitHub:** [github.com/sayan9168](https://github.com/sayan9168)
* 🐦 **Twitter / X:** [@notfound_sayan](https://x.com/notfound_sayan)
* 📸 **Instagram:** [@_sayyyyan](https://instagram.com/_sayyyyan)
*用 ❤️ 和 Python `asyncio` 制作*
标签:Python异步, SOCKS5, 内网穿透, 反向隧道, 流量混淆, 网络工具, 计算机取证, 逆向工具