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