# 内网穿透 **Repository Path**: soeasyY/ez_tunnel ## Basic Information - **Project Name**: 内网穿透 - **Description**: 简单的内网穿透工具 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-10-18 - **Last Updated**: 2024-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 内网穿透 #### 介绍 简单的内网穿透工具 #### 外网段业务逻辑 本程序为用户可以直接访问的中介服务器上运行的穿透服务端 ##### 工作流程: 1. 启动 ControlPort 的监听,等待在内网环境运行的受控端连接(内网主机要连接到这个端口等待控制指令和心跳) 2. 启动 ListenPort 的监听,等待用户的web请求 3. 启动 TunnelPort 的监听,等待内网受控端链接隧道 4. 启动定时释放任务,清楚过期链接和无效链接 5. 创建一个阻塞等待配对器组装 ##### 用户访问时: 1. ListenPort 接受到用户的请求, 通过addConnMatchAccept新建(未完全配置,tunnel为空)一个配对器ConnMatch到全局map connListMap中, 2. 通过ControlPort向内网被控主机发送一个链接通知“new\n” 3. 内网主机在接收到消息后,打通真实web服务器和TunnelPort的隧道 4. 监听在TunnelPort的程序得到一个新的请求链接 5. 在makeForward方法中通过configConnListTunnel方法将1步骤创建的不完整的配对器补充完整 6. 通过向通道connListMapUpdate中传值通信,运行tcpForward中joinConn方法,将来用户的链接和来自内网客户端的链接绑定 从而实现内网穿透 #### 内网段业务逻辑 本程序为内网环境中web服务器所在的主机(或者可连接到内网web服务器同时可以访问外网的间机器) ##### 工作流程: 1. 连接远端服务器ControlAddrPort,接受远端服务器的控制命令 2. 当用户访问远端服务器时,ControlAddrPort传来控制命令"new\n", 3. 执行combine方法,程序同时拨通TunnelAddrPort 和 ServerAddrPort, 4. 并通过joinConn方法,用io.Copy的方式讲TunnelAddrPort的通信数据和ServerAddrPort的通信数据配对, 实现将内网数据提交到中介服务器ControlAddrPort,再通过中介服务期上的程序实现内网穿透 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 ##### 1. 公网访问服务器端的配置文件 ``` # outside.exe配置文件 # ListenPort:外网端的web服务端口 # 默认值:0.0.0.0:888 ListenPort=0.0.0.0:888 # ControlPort是外网端控制端口, # 默认值:0.0.0.0:8009 ControlPort=0.0.0.0:8009 # TunnelPort是隧道端口, # 默认值:0.0.0.0:8008 TunnelPort=0.0.0.0:8008 ``` ##### 2. 内网访问服务器端的配置文件 ``` # inside.exe配置文件 # ServerAddrPort是内网web服务器的IP地址和端口 # 默认值:内网web服务器的IP地址和端口 ServerAddrPort=192.xxx.xxx.xxx:80 # ControlAddrPort是内网控制端口, # 默认值:公网IP:8009 ControlAddrPort=xxx.xxx.xxx.xxx:8009 # TunnelAddrPort是内网隧道端口, # 默认值:公网IP:8008 TunnelAddrPort=xxx.xxx.xxx.xxx:8008 ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request