pjlt / lanthing-pc

BSD 3-Clause "New" or "Revised" License
92 stars 12 forks source link

Lanthing

build

Lanthing是一款开源的串流/远程控制工具。除了主控端和被控端,它还包含完整的服务端中继服务器

当前支持下列系统:

特性

各平台已实现特性如下表:

特性 Windows Linux macOS Android
主控
被控
硬编
硬解 Linux当前仅支持部分平台和硬件
软编软解
AVC
HEVC
YUV444
全屏独占 全屏独占模式在局域网下有时可以表现出0帧延迟
复制粘贴 支持文本和文件的复制粘贴,不支持文件夹
物理键鼠
物理手柄
虚拟键鼠
虚拟手柄
多指触控
绝对位置鼠标 鼠标默认使用该模式
相对位移鼠标 某些游戏需要切换至该模式才能正常操作,需使用者按Win+Shift+X手动切换
自定义鼠标加速 仅在相对位移模式生效
P2P
中继
切换显示器
远控旋转屏 Android只做了坐标转换,没有适配手机方向
拉伸显示
原比例显示
禁用鼠标
禁用键盘
禁用手柄
禁传声音
TCP
UDP UDP基于该项目做少量修改,修改部分未开源
自定义过滤虚拟组网
自定义端口映射 允许自定义串流使用的UDP端口范围,需自行在路由器做相应设置
操作UAC界面
操作登录界面

端到端加密

Lanthing的端到端加密具体是如何实现的:

  1. 主控端和被控端在程序内部生成 key-pair -> 证书 -> 证书指纹
  2. 主控和被控通过一条安全通道交换证书指纹
  3. 主控和被控通过P2P或中继成功建立底层连接,开始DTLS握手,握手过程会互发证书
  4. 主控和被控收到握手中的证书,使用证书指纹校验证书(其实就是一个哈希值)
  5. 确认不是他人伪造的证书后,使用该证书继续后续DTLS流程,握手完成后全程加密

通过上面的流程,可以得出以下事实:

  1. 不管是P2P还是中继,截取到流量的中间人不可能解密
  2. 服务器拿到的只是一个哈希值,并且流量不从这里走,没有解密这一说法

上面提到的安全通道,Github Releases页面下载的lanthing,使用的是作者自己搭的lanthing-svr,走的TLS1.2。你也可以选择自建这个服务器。

编译

编译环境

Windows:

Linux:

编译命令

git clone --recursive https://github.com/pjlt/lanthing-pc.git
cd lanthing-pc
cp options-default.cmake options-user.cmake  #可选,如果需要修改编译选项则执行此步,并修改相应选项;如果QT不在环境变量里,则必须修改LT_QT_CMAKE_PATH
./build.[ps1|sh] prebuilt fetch
./build.[ps1|sh] build Release

使用

  1. 下载Github Releases页面下的lanthing.zip并解压
  2. 管理员运行lanthing.exe
  3. 输入对方设备码和校验码

注意:连接上对方默认只有手柄权限,鼠标和键盘权限需要被控方手动给予。 如果不想每次都这么麻烦,可以在管理页面修改某个客户端的默认权限。

交流

遇到bug或者有任何建议请提issue,或在QQ群反馈。QQ群: 89746161