Lucky 移动端远程管理实战:手机调通 4 个核心 API,规则随时改
【免费下载链接】lucky软硬路由公网神器,ipv6/ipv4 端口转发,反向代理,DDNS,WOL,ipv4 stun内网穿透,cron,acme,rclone,ftp,webdav,filebrowser项目地址: https://gitcode.com/GitHub_Trending/luc/lucky
出门在外发现服务器连不上,不用赶回家——打开手机端应用调一次 Lucky 的 API,把端口转发规则改好、再一键 WOL 唤醒设备,整套远程管理就跑通了。Lucky 是软硬路由与家庭服务器上的网络工具,端口转发、反向代理、DDNS、网络唤醒(WOL)全部提供 HTTP 接口,你完全可以用它给手机或其他客户端做远程管理。
下面按"先跑通 → 按目的拆能力 → 工程细节 → 源码导航"的顺序讲,所有接口路径和字段都来自仓库实际代码。
先跑通一次调用:环境确认与登录取 Token
这一节能解决两个问题:Lucky 服务是否可达、你的账号能否拿到后续所有请求的通行证(Token)。
- 存活探测:
GET /version不需要登录,直接返回版本号,适合做心跳。 - 登录:
POST /api/login。注意请求体 JSON 字段是首字母大写的Account和Password,写成小写会解析失败。 - 登录成功返回
token(JWT,有效期 24 小时),之后所有/api/*请求都要在Authorization请求头(或同名 query 参数)里带上它。 - 一个容易踩的坑:Lucky 默认只接受局域网来源的后台请求,远程管理前需在基础设置里打开"允许外网访问"开关,否则外网请求会被直接拦截。
# 1. 存活探测(无需登录) curl http://<Lucky IP>:<管理端口>/version # 2. 登录取 Token TOKEN=$(curl -s -X POST http://<Lucky IP>:<管理端口>/api/login \ -H 'Content-Type: application/json' \ -d '{"Account":"账号","Password":"密码"}' | jq -r .token) # 3. 用 Token 调用状态接口,验证链路 curl -s http://<Lucky IP>:<管理端口>/api/status -H "Authorization: $TOKEN"🔑 记住一个全局约定:Lucky 的业务接口 HTTP 状态码几乎总是 200,成功与否看返回体里的ret字段,0才是成功。
按使用目的拆能力:查状态、管转发、配域名、唤醒设备
这一节按"你想干什么"分组,每组给出接口地址、方法和关键字段。总览表放在本节末尾。
查状态与日志:/api/status 和 /api/logs
GET /api/status:内存、CPU、进程 CPU 占用、当前 TCP/UDP 连接数、运行时长,移动端首页卡片直接消费它。GET /api/logs?pre=<时间戳>:增量拉取该时间戳之后的运行日志。GET /api/info:应用基础信息。
端口转发接口:规则增删与开关
Lucky 端口转发接口的规则对象关键字段:Name、ForwardTypes(tcp/udp数组)、ListenAddress、ListenPorts、TargetAddressList、TargetPorts(端口支持8000-8005区间写法)。
GET /api/portforwards:规则列表,附带每条规则的流量统计和最近日志。POST /api/portforward:新增规则。Key由服务端随机生成(16 位),新规则会立即启用。PUT /api/portforward:修改(整体提交,带原Key)。DELETE /api/portforward?key=<key>:删除。GET /api/portforward/enable?key=<key>&enable=true:开关规则,注意这里用的是 GET + query。GET /api/portforward/logs?key=<key>&pageSize=10&page=1:分页查访问日志。
# 新增一条端口转发规则:0.0.0.0:9000 -> 192.168.1.100:5000 (tcp) curl -s -X POST http://<Lucky IP>:<管理端口>/api/portforward \ -H "Authorization: $TOKEN" -H 'Content-Type: application/json' \ -d '{ "Name": "NAS 远程访问", "ForwardTypes": ["tcp"], "ListenAddress": "0.0.0.0", "ListenPorts": "9000", "TargetAddressList": ["192.168.1.100"], "TargetPorts": "5000" }'DDNS 接口:域名任务的增删改
关键字段:TaskName、TaskType(IPv4/IPv6)、GetType(url从 URL 解析 IP /netInterface从网卡取 IP)、URL、Domains、DNS(内含Name、ID、Secret)、TTL。
GET /api/ddnstasklist:任务列表。若 DDNS 总开关未开启会返回ret=6,先用PUT /api/ddns/configure把Enable置为true。POST /api/ddns/PUT /api/ddns?key=<key>/DELETE /api/ddns?key=<key>:增改删任务。GET /api/ddns/enable?key=<key>&enable=true:开关单个任务。
反向代理接口:规则查询与开关
GET /api/reverseproxyrules:规则列表。POST /api/reverseproxyrule/PUT /api/reverseproxyrule/DELETE /api/reverseproxyrule?key=<key>:增改删。GET /api/reverseproxyrule/enable?ruleKey=<key>&proxyKey=<proxyKey>&enable=true:精确开关某条规则下的某个代理。GET /api/reverseproxyrule/logs?ruleKey=&proxyKey=&pageSize=&page=:分页查访问日志。
网络唤醒接口:一键 WOL 设备
设备对象关键字段:DeviceName、MacList、BroadcastIPs(广播地址列表,留空则用本机网段广播地址)、Port(默认 9)、Repeat(重发次数,默认 5)。
GET /api/wol/devices/POST /api/wol/device/PUT /api/wol/device/DELETE /api/wol/device?key=<key>:设备增删改查。GET /api/wol/device/wakeup?key=<key>:发送唤醒报文。
# 按设备 key 触发 WOL 唤醒 curl -s "http://<Lucky IP>:<管理端口>/api/wol/device/wakeup?key=<设备key>" \ -H "Authorization: $TOKEN"全模块接口总览
| 模块 | 接口 | 方法 | 说明 |
|---|---|---|---|
| 状态 | /api/status | GET | 资源与连接数 |
| 日志 | /api/logs | GET | 按时间戳增量拉取 |
| 版本 | /version | GET | 无需 Token,可做心跳 |
| 端口转发列表 | /api/portforwards | GET | 含流量与最近日志 |
| 端口转发规则 | /api/portforward | POST / PUT / DELETE | DELETE 用 query 传key |
| 端口转发开关 | /api/portforward/enable | GET | key+enable |
| 转发日志 | /api/portforward/logs | GET | key+ 分页参数 |
| DDNS 任务列表 | /api/ddnstasklist | GET | 总开关未开返回ret=6 |
| DDNS 任务 | /api/ddns | POST / PUT / DELETE | PUT/DELETE 用 query 传key |
| DDNS 开关 | /api/ddns/enable | GET | key+enable |
| 反向代理列表 | /api/reverseproxyrules | GET | 规则列表 |
| 反向代理规则 | /api/reverseproxyrule | POST / PUT / DELETE | DELETE 用 query 传key |
| 反向代理开关 | /api/reverseproxyrule/enable | GET | ruleKey+proxyKey+enable |
| WOL 设备 | /api/wol/device | POST / PUT / DELETE | DELETE 用 query 传key |
| WOL 唤醒 | /api/wol/device/wakeup | GET | query 传key |
| 登录 / 注销 | /api/login//api/logout | POST / PUT | 登录无需 Token |
Token 续期、重试与弱网策略
这些是写进移动端客户端前的工程细节,照着做能少踩很多坑。
- Token 续期:JWT 有效期 24 小时;收到
ret=-1("登录失效")时重新走/api/login即可。注意服务端每次登录都会刷新登录密钥,新登录会使旧 Token 立即失效,多端同时用的话要保证同一时刻只保留一个活跃登录。 - 错误判定:HTTP 200 不代表成功。
ret=0成功;ret=1多为参数/校验错误,不要盲目重试,先看msg;资源超限、保存失败等对应其他非零值。 - 重试策略:只对网络层错误(超时、断连)做指数退避重试;写操作(POST/PUT/DELETE)无法确认幂等性前不要自动重发。
- 缓存规避:官方前端每次 GET 都带
_=<时间戳>参数绕过缓存(见 web/adminviews/src/apis/utils.js),你的客户端可同样处理。 - 弱网/离线:规则列表本地缓存一份;断线期间把写操作放进队列,重连后先
GET /api/portforwards等接口核对最新状态,再逐条提交。 - 心跳:用无需登录的
GET /version做存活探测,失败才进入重连流程。
// 带重试与 Token 续期的请求封装 async function request(url, options = {}) { for (let i = 0; i < 3; i++) { try { const res = await fetch(url, { ...options, headers: { Authorization: token, ...options.headers } }); const data = await res.json(); if (data.ret === -1) await login(); // 登录失效,重新取 Token return data.ret === 0 ? data : null; // 业务错误不盲目重试 } catch (e) { await new Promise(r => setTimeout(r, 1000 * 2 ** i)); // 网络错误退避重试 } } return null; }📶 这段封装基本就是移动端 API 层的全部骨架,后面每个功能页都只是调用它。
顺着源码深挖:后端、前端与配置目录
想确认字段细节或加新能力时,直接看这些路径:
- 路由注册与 Token 校验:web/web.go——全部
/api路由、tokenCheck中间件、外网访问拦截都在这里。 - 各模块处理器:web/portforward.go、web/ddns.go、web/reverseproxy.go、web/wol.go。
- 字段结构定义:config/portforward.go、config/ddns.go、config/wol.go,JSON 字段名以
jsontag 为准。 - 前端调用范例:web/adminviews/src/apis/utils.js,每个接口都封装成独立函数,照着抄最省事。
- 转发与代理实现:socketproxy/;WOL 魔术报文:thirdlib/go-wol/。
- 界面组件参考:web/adminviews/src/components/,Vue3 组件可直接借鉴交互设计。
把status+ WOL 这两个最轻量的接口先做成一个两页小应用跑起来,再逐步补齐端口转发与 DDNS 的规则管理页。动手前记得先在服务端确认外网访问开关与账号安全,你的第一次远程调用就不会被拦在半路。
【免费下载链接】lucky软硬路由公网神器,ipv6/ipv4 端口转发,反向代理,DDNS,WOL,ipv4 stun内网穿透,cron,acme,rclone,ftp,webdav,filebrowser项目地址: https://gitcode.com/GitHub_Trending/luc/lucky
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考