python实现将局域网内网端口暴露到公网访问内网穿透的代码
代码语言:python
所属分类:其他
代码描述:python实现将局域网内网端口暴露到公网访问内网穿透的代码
代码标签: python 局域网 内网 端口 暴露 公网 访问 内网 穿透 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
# ## 使用说明
# ### 1. 保存代码
# 将代码保存为 `tunnel.py`
# ### 2. 在公网服务器上运行服务端
# ```bash
# # 直接运行
# python3 tunnel.py server --control-port 8888 --public-port 8080
# # 后台运行
# nohup python3 tunnel.py server --control-port 8888 --public-port 8080 > tunnel.log 2>&1 &
# ```
# **参数说明:**
# - `--control-port 8888`:客户端连接的控制端口
# - `--public-port 8080`:外部访问的公网端口
# ### 3. 在内网机器上运行客户端
# 假设你的内网有一个HTTP服务运行在80端口:
# ```bash
# # 连接到服务器
# python3 tunnel.py client --server-host 1.2.3.4 --control-port 8888 --local-port 80
# # 指定本地服务地址
# python3 tunnel.py client --server-host 1.2.3.4 --local-host 192.168.1.100 --local-port 8000
# ```
# **参数说明:**
# - `--server-host 1.2.3.4`:公网服务器的IP地址(必需)
# - `--control-port 8888`:服务器的控制端口
# - `--local-host 127.0.0.1`:本地服务地址
# - `--local-port 80`:本地服务端口
# ### 4. 访问内网服务
# 在浏览器中访问:
# ```
# http://<服务器公网IP>:8080
# ```
# ## 完整示例
# ### 示例1:暴露内网Web服务
# **场景:**内网有一个运行在8000端口的Web服务
# 1. **公网服务器(IP: 1.2.3.4):**
# ```bash
# python3 tunnel.py server --control-port 8888 --public-port 8080
# ```
# 2. **内网机器:**
# ```bash
# python3 tunnel.py client --server-host 1.2.3.4 --control-port 8888 --local-port 8000
# ```
# 3. **访问:**
# ```
# http://1.2.3.4:8080
# ```
# ### 示例2:暴露内网SSH服务
# **场景:**暴露内网22端口的SSH服务
# 1. **公网服务器:**
# ```bash
# python3 tunnel.py server --control-port 8888 --public-port 2222
# ```
# 2. **内网机器:**
# ```bash
# python3 tunnel.py client --server-host 1.2.3.4 --control-port 8888 --local-port 22
# ```
# 3. **远程SSH连接:**
# ```bash
# ssh -p 2222 user@1.2.3.4
# ```
# ### 示例3:暴露MySQL数据库
# **场景:**暴露内网MySQL服务(3306端口)
# 1. **公网服务器:**
# ```bash
# python3 tunnel.py server --control-port 8888 --public-port 3306
# ```
# 2. **内网机器:**
# ```bash
# python3 tunnel.py client --server-host 1.2.3.4 --control-port 8888 --local-port 3306
# ```
# 3. **远程连接:**
# ```bash
# mysql -h 1.2.3.4 -P 3306 -u root -p
# ```
# ## 使用systemd管理服务(Linux)
# ### 服务端配置
# 创建文件 `/etc/systemd/system/tunnel-server.service`:
# ```ini
# [Unit]
# Description=Tunnel Server
# After=network.target
# [Service]
# Type=simple
# User=root
# WorkingDirectory=/opt/tunnel
# ExecStart=/usr/bin/python3 /opt/tunnel/tunnel.py server --control-port 8888 --public-port 8080
# Restart=always
# RestartSec=5
# [Install]
# WantedBy=multi-user.target
# ```
# ### 客户端配置
# 创建文件 `/etc/systemd/system/tunnel-client.service`:
# ```ini
# [Unit]
# Description=Tunnel Client
# After=network.target
# [Service]
# Type=simple
# User=root
# WorkingDirectory=/opt/tunnel
# ExecStart=/usr/bin/python3 /opt/tunnel/tunnel.py client --server-host 1.2.3.4 --control-port 8888 --local-port 80
# Restart=always
# RestartSec=5
# [Install]
# WantedBy=multi-user.target
# ```
# ### 启动服务
# ```bash
# # 创建目录并复制文件
# mkdir -p /opt/tunnel
# cp tunnel.py /opt/tunnel/
# # 重载systemd
# systemctl daemon-reload
# # 启动服务
# systemctl start tunnel-server # 或 tunnel-client
# systemctl enable tunnel-server # 开机自启
# systemctl status tunnel-server # 查看状态
# # 查看日志
# journalctl -u tunnel-server -f
# ```
# ## 测试本地服务
# 如果你没有现成的Web服务,可以使用Python快速启动一个:
# ```bash
# # 在内网机器的某个目录下运行
# python3 -m http.server 8000
# ```
# 然后客户端连接:
# ```bash
# python3 tunnel.py client --server-host 1.2.3.4 --local-port 8000
# ```
# ## 功能特点
# ✅ **简单易用** - 单文件部署,命令行配置
# ✅ **自动重连** - 客户端断线自动重连
# ✅ **心跳保活** - 10秒心跳维持连接
# ✅ **多隧道支持** - 支持多个并发连接
# ✅ **跨平台** - 支持Linux/Windows/macOS
# ✅ **详细日志** - 完善的日志记录
# ✅ **稳定可靠** - 完善的错误处理
# ## 性能优化建议
# 1. **调整缓冲区大小**:修改 `buffer_size = 32 * 1024`
# 2. **使用PyPy**:使用PyPy替代CPython提升性能
# 3. **异步IO**:改用asyncio实现更高并发
# 4. **连接池**:复用连接减少开销
# ## 安全建议
# ⚠️ **添加认证** - 建议添加token认证机制
# ⚠️ **使用加密** - 可以添加TLS/SSL加密
# ⚠️ **防火墙配置** - 只开放必要的端口
# ⚠️ **访问控制** - 添加IP白名单
# ⚠️ **流量限制** - 添加带宽和连接数限制
# ## 故障排查
# 1. **连接失败**
# - 检查服务器IP和端口是否正确
# - 检查防火墙是否开放对应端口
# - 使用 `telnet 服务器IP 8888` 测试连通性
# 2. **频繁断开**
# - 检查网络稳定性
# - 查看日志确认错误原因
# - 调整心跳间隔
# 3. **无法访问**
# - 确认本地服务是否运行
# - 确认端口号是否正确
# - 使用 `curl http://localhost:80` 测试本地服务
# 4. **性能问题**
# - 调整缓冲区大小
# - 检查网络带宽
# - 考虑使用PyPy或异步版本
# ## 进阶:添加认证功能
# 在代码开头添加:
# ```python
# # 配置
# SECRET_TOKEN = "your-secret-token-change-this" # 修改此Token
# # 在客户端注册时发送token
# register_msg = Message(
# MSG_TYPE_REGISTER,
# data=f"{SECRET_TOKEN}|client-{self.local_host}:{self.local_port}".encode()
# )
# # 在服务端验证token
# data_parts = msg.data.decode('utf-8', errors='ignore').split(.........完整代码请登录后点击上方下载按钮下载查看















网友评论0