# studyGo **Repository Path**: mdsSJY/studyGo ## Basic Information - **Project Name**: studyGo - **Description**: golang 实现一个内网穿透工具 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-22 - **Last Updated**: 2024-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言, 内网穿透 ## README # Golang实现一个内网穿透 ### 声明 本项目旨在学习go以及其生态。实现了一个内网穿透。该项目开发基于[https://github.com/ICKelin/zta](https://github.com/ICKelin/zta)。[@B站呼噜聊网络](https://www.bilibili.com/video/BV1hFY7ekEiC/?vd_source=b07d260d46fdb9cd8d1b62938fdae1d3)。源码基本照搬该项目的,只是用了try-catch的方式改造了一下。并去掉了认证,和apisix路由部分的逻辑。 * ### 简绍 实现了一个通过访问部署了`服务端`的公网服务器,穿透内网访问部署了`客户端`的设备所对应端口的功能。明文传输无加密,无认证。后续更不更新加密传输、客户端UI啥的,还得等后续了。 * ### build 安装go sdk,window环境下执行 ```bat REM 或者直接双击 ./build.bat ``` 获得客户端可执行文件为 [stgo_client.exe](./release/stgo_client.exe) 获得服务端可执行文件为 [stgo_server](./release/stgo_server) * ### 安装 - #### 客户端文件结构(window) ```bash ├───stgo_client.exe ├───start_client.bat # 客户端启动入口 ``` - #### 服务端文件结构(linux) ```bash ├───stgo_server # 服务端启动入口 ├───etc │ ├───gateway.yaml │ └───listener.json # 启动指令 stgo_server -c ./etc/gateway.yaml ``` - #### docker部署服务端 ```bash docker build -t 10.6.0.2:5000/study_go:latest . docker-compose up -d ``` * ### 配置文件listener.json解释 [listener.json](./etc/listener.json) ```yaml { "id": "3", "client_id": "test-client", # 这个是客户端id "public_protocol": "http", "public_ip": "0.0.0.0", # 服务端允许所有ip "public_port": 10001, # 这是服务端 监听端口,需要放行 "internal_protocol": "tcp", "internal_ip": "127.0.0.1", # 这是对应的客户本地 "internal_port": 7777 # 这个是客户端 app 的服务端口 # 意思就是访问公网服务端 10001 端口,对应客户端7777端口的应用,访问类型是http } ``` * ### 这个项目可以学习到什么 * #### 一些网络开发的Go生态库,go工具链 * #### go中处理json,yaml等配置文件 * #### go中实践UDP、TCP、Http等协议的使用 * [记录](./assets/开发记录) * ### 鸣谢 感谢[https://github.com/ICKelin/zta](https://github.com/ICKelin/zta)开源分享,感谢本项目中提及的所有开源工具/软件/项目。