A port forwarding tool written in Go. Go语言开发的端口转发工具。
开发语言:GO
控制台框架:beego
数据库:sqlite3
https://github.com/jahen/port-forward/releases
支持Web控制台添加端口映射
支持对每条端口映射进行开启和关闭控制
支持 RestfulAPI 接口,方便被其它系统集成
支持每条端口转发的同时,再分发给多个端口,满足某些测试场景
类似企业交换机的功能,即软交换机,主要是方便企业网络维护人员或开发人员
使用问题或个性化需求,请直接在 GitHub 仓库的 Issues 中提问:
https://github.com/jahen/port-forward/issues
- 下载编译好的程序包,并解压程序包
- 执行 start.sh (Linux)或 start.bat (Win)命令
- 打开浏览器,进入控制台,打开 http://127.0.0.1:8080/login
- 输入用户 admin 密码 123456 进入控制台
本项目发布的 forward-agent.*.zip / forward-server.*.zip 等二进制包,本质上都是通过设置 GOOS / GOARCH 后运行 go build 得到的可执行文件,然后和配置、静态资源一起打包。
在仓库根目录可以使用提供的 Makefile.cross-compiles 进行一键构建,所有产物会输出到 ./release/ 目录:
# 构建 forward-server / forward-agent 全平台二进制 + Android AAR
make -f Makefile.cross-compiles all
# 仅构建 forward-server 多平台二进制
make -f Makefile.cross-compiles server
# 仅构建 forward-agent 多平台二进制
make -f Makefile.cross-compiles agent
# 仅构建 Android AAR(portforward.aar)
make -f Makefile.cross-compiles aar在仓库根目录:
# Linux / amd64
GOOS=linux GOARCH=amd64 go build -o forward-server ./forward-server
# Windows / amd64
GOOS=windows GOARCH=amd64 go build -o forward-server.exe ./forward-server
# macOS / amd64
GOOS=darwin GOARCH=amd64 go build -o forward-server ./forward-server# Linux / amd64
GOOS=linux GOARCH=amd64 go build -o forward-agent ./forward-agent
# Windows / amd64(等价于 forward-agent/build_win.bat)
GOOS=windows GOARCH=amd64 go build -o forward-agent.exe ./forward-agent
# Linux / arm / arm64
GOOS=linux GOARCH=arm GOARM=7 go build -o forward-agent.arm ./forward-agent
GOOS=linux GOARCH=arm64 go build -o forward-agent.arm64 ./forward-agent你也可以直接使用仓库中自带的脚本(作用等价于上面的命令):
forward-server/build_linux.sh、forward-server/build_linux.bat、forward-server/build_win.bat、forward-server/build_mac.batforward-agent/build_linux.sh、forward-agent/build_linux.bat、forward-agent/build_win.bat、forward-agent/build_mac.bat
本项目支持使用 gomobile bind 打包为 Android .aar,在移动端中直接嵌入端口转发服务。
go env -w GO111MODULE=on
go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init
# 如遇到缺少 bind 包的错误,可手动补充:
go get golang.org/x/mobile/bind@latest在仓库根目录执行:
cd forward-agent
gomobile bind -target=android -o portforward.aar ./mobile生成的 portforward.aar 同时包含:
forward-agent的 Agent 客户端逻辑;forward-server的 Web 控制台和端口转发服务逻辑。
- 将
portforward.aar拷贝到 Android 工程的app/libs/目录。 - 在
app/build.gradle中添加依赖:
dependencies {
implementation files('libs/portforward.aar')
}- Kotlin 代码中调用(类名以实际 gomobile 生成结果为准,下面示意为
Mobile):
// forward-agent/conf/app.conf,从配置读取 magic.server,未设置则使用默认值 "forward.apiclub.top:7000"
Mobile.startAgent()
// 将 Agent 端完整配置内容作为参数传入(等价于一份 app.conf):
Mobile.startAgentFromConfLine("""
magic.server = "forward.apiclub.top:7000"
""".trimIndent())
// 启动 Web 控制台和转发服务(使用 forward-server/conf/app.conf + data.conf)
// 会阻塞当前线程,建议放后台线程
Thread {
Mobile.startServer()
}.start()
// 同样地,你也可以将 Server 端完整配置内容作为参数传入:
// 不能写 include "data.conf",需要把 data.conf 的内容直接合并进这段配置文本中。
Thread {
Mobile.startServerFromConfLine("""
app.name = "PortForward"
app.cname = "端口转发系统"
servername = "PortForward-Server"
runmode ="dev"
#runmode ="prod"
viewspath = "views"
#logfile.config = "close"
[dev]
httpaddr = "0.0.0.0"
httpport = 8080
recoverpanic = false
[prod]
httpaddr = "0.0.0.0"
httpport = 8081
recoverpanic = true
graceful = true
magic.service = ":7000"
api.auth = "26CCD056107481F45D1AC805A24A9E59"
agent.auth = "722ED8F8D9900CC1AB17243DC7B51A2D"
onstart.forward = "false"
""".trimIndent())
}.start()- 项目主许可证:本仓库的修改版整体在
LICENSE所示的 Apache License 2.0 下分发。 - 第三方组件:本项目基于原项目 port-forward 进行修改,
其中来自原项目的部分代码依然遵循 Mulan Permissive Software License v2 (MulanPSL-2.0),
其完整文本见LICENSE-MulanPSL2.0。



