Why
把一个 8 GB 的文件从电脑传到手机,走网盘要先上行到机房再下行回来, 两次跨越公网、两次受制于宽带上行。而它们本来就在同一个交换机下面。
数据只在局域网内走一跳。千兆有线就是千兆的速度,不被宽带上行掐脖子,也不排队等云端配额。
没有中转服务器意味着没有第三方副本、没有服务端日志、没有账号体系。私钥留在设备本地,不出机器。
UDP 广播自动发现,两端启动一两秒就出现在彼此的雷达页。路由器开了 AP 隔离,还能手动填 IP 单播直连。
How it works
发送方把分片直接 PUT 到对端设备上跑着的 HTTP 服务,
接收方负责落盘、校验与归档。两端之间没有任何第三方。
每 5 秒向 255.255.255.255 与组播 224.0.0.167 广播身份,30 秒无心跳判离线。遇到 AP 隔离,可手动输入 IP:Port 走单播探针直连。
Ed25519 公钥指纹 + 6 位一次性动态码。两端屏幕上的码一致、且双方都点了确认,才会写入信任列表。
发送端提交文件名、大小与 SHA-256;接收端回一个已落盘的 offset —— 这就是断点续传的起点。缺哈希直接拒绝握手,没有「没校验和就当过了」的降级路径。
1 / 2 / 4 MB 分片按偏移随机写入。全程流式读写,内存占用恒定 —— 传 50 GB 和传 50 MB 一样不吃内存。
全量 SHA-256 比对通过后,文件才从 .tmp 发布到目标目录。文件名强制净化,../、绝对路径与非法字符一律拦掉。
| 用途 | 协议 | 端口 |
|---|---|---|
| 设备发现 | UDP | 53317(固定) |
| 文件传输 + 聊天 | TCP · HTTP/1.1 + WebSocket | 53317,被占用时依次尝试 53318…53327 |
实际监听端口通过 UDP 发现报文的 port 字段告知对端,所以 TCP 端口漂移不影响互通。
Features
两端各自原生实现,共用同一份线上协议契约;任何一端单方面偏离,双向契约测试就会有一侧变红。
UDP 广播与组播、主动探针、手动 IP 直连、隐身开关。
Ed25519 身份、指纹比对、6 位动态码双向确认、信任白名单。未配对设备的请求挂起等人工确认,不自动接收。
1/2/4 MB 分片、流式读写、实时速率与 ETA。
按偏移断点续传、流式 SHA-256 校验、断连重试上限。
Android 前台服务保活,通知栏显示进度并支持暂停/取消;桌面端托盘常驻、可自定义落盘目录。
WebSocket 全双工聊天,文件卡片与消息混编,心跳 + 指数退避重连。
协议报文日志、丢包率/限速/时延故障注入、链路测速。
桌面端 Tauri 2 + React 19 + Rust 协议栈;Android 端 Kotlin + Jetpack Compose + Ktor。
Download
构建于 2026-09-10。所有安装包直接由本站分发,下方附 SHA-256 校验值,装之前建议核一下。
npm run tauri build 自行构建。
LanShare_0.1.0_x64-setup.exe 5ccce1f6ebd5db8bee4668be46a269dc5f427c406279d4fae7b0ed9dc49c5ab6 LanShare_0.1.0_x64_en-US.msi 6f6a5311549dd9d19966e59b04c98311492d84a4c8776de4d2b7de5e2973e695 lanshare-desktop.exe eb5e1610ca603878a80f5f1940d95d5555704867d44e23231134731da448a925 lanshare-android-1.0.0-release.apk 8b7f4cf1cbb4f9931c45d672fcd71945da19d50479636e2225a997cc2f3dec0f
电脑和手机接同一个 Wi-Fi 或网段。别用访客网络 —— 那上面通常开了 AP 隔离,两台设备互相看不见。
两端都启动,雷达页 1~2 秒内应该出现对方的卡片。
点击配对,核对两端弹出的 6 位动态码一致,然后双方都确认。
任选一端发文件,看进度和速率,完成后在接收端确认落盘路径和哈希校验结果。
依次检查:是否同网段 → 防火墙是否放行 UDP/TCP 53317 → 仍不行就用「手动 IP 直连」填对端 IP:53317。
Security & Limits
这一节不是免责声明,是使用说明。知道它在哪儿结实、哪儿薄,你才用得对。
Ed25519 身份文件存放在应用私有目录,不上传、不同步、不进版本库。
6 位一次性动态码需要两端各自点确认。未配对设备发来的传输请求会挂起等人工处理,不会自动接收。
接收端强制净化文件名,阻断 ../、绝对路径与非法字符;同名冲突按策略重命名而非覆盖。
握手阶段没有 SHA-256 就直接拒绝,不存在「校验不了就放行」的降级分支。
局域网内不做 TLS。Android 侧只对 10/8、172.16/12、192.168/16、169.254/16 与回环放行明文,其余仍强制 HTTPS —— 不是把全局明文开关打开。但这套东西的设计前提就是可信局域网,别做端口映射。
APK 能构建、JVM 单元测试全绿,但从未在真实设备上跑过。见上方下载区的完整说明。
该功能依赖 QUERY_ALL_PACKAGES,属于 Google Play 敏感权限,需单独申报且很可能被拒。若计划上架,建议移除该权限并砍掉这个功能;侧载不受影响。
macOS 与 Linux 需自行从源码构建。