55d4b874bd477a9449bbdf83eaafa0a912fb1705
问题: 1. group 尺寸已知(校验包已到)后,数据分支对任意 packet_index resize received_shards 并写入,越界索引会把 shard 列表撑出 data_shards+parity_shards,decode_with_rs 长度校验必然失败, 整个 group 报废、FEC 恢复能力丧失;校验包索引落在数据区 (< data_shards)还会直接覆盖数据 shard。 2. 内部批量格式的长度字段为 u16,payload.len() as u16 静默截断。 修复: - 数据包:group.data_shards 已知时 packet_index >= data_shards 直接丢弃。 - 校验包:packet_index < data_shards 直接丢弃; received_shards 已被撑大(尺寸未知期的越界包)时放弃该 group。 - 长度字段改用 u16::try_from 检查转换(编码器本就有 Payload too big 前置检查,解码器补齐对称防御)。 测试:越界数据包不污染 group(重构正常产出恢复包)、 数据区校验包索引被拒绝且 group 保持可用。
VNT
一个简单、高效、能快速组建虚拟局域网的工具
快速开始
简单说明
- vnt2_cli 是一个纯命令行组网工具,可以从命令行参数或配置文件快速启动组网
- vnt2_ctrl 和vnt2_cli搭配使用,vnt2_cli后台运行时,可以用vnt2_ctrl来获取组网状态
- vnt2_web 是一个集成web服务的组网工具,带web页面,可以在页面上操作组网
使用vnt2_cli组网
使用方式和vnt1.0一样,只是增减了一些功能,具体参数请查看 -h
# 启动程序 服务端可以使用101.35.230.139:6660
./vnt2_cli -k 123456 -s 101.35.230.139:6660
# 查看组网信息
./vnt2_ctrl info
使用vnt2_web组网
-
启动程序
# 启动程序 ./vnt2_web -
浏览器打开 http://127.0.0.1:19099
-
在页面上添加组网配置,再启动组网
VNT2.0新特性
- 提升安全性,支持tcp-tls、quic、wss协议连接服务器,和服务端强制使用tls加密,并支持证书绑定,防止伪造服务端攻击
- 提升流量稳定性,支持使用quic代理流量,支持FEC冗余传输
- 简化操作,去除了大量vnt1.0的重复和无用的配置参数
- vnt-link、vnt合二为一
- 支持有tun模式、无tun模式、端口映射
- 全功能的情况下,减少程序体积
- 性能提升,支持linux-offload
- 更规范的api接入,可以轻松自定义客户端
- 支持同时连接多个服务端,可以容灾和负载均衡
说明
vnt2.0整体重构了一遍,和1.0不兼容,同时也可能引入新的bug,欢迎反馈
其他平台后续再推出
相关库
- tun虚拟网卡(https://github.com/tun-rs/tun-rs)
- 路由设置(https://github.com/tun-rs/route_manager)
- 用户态协议栈(用于quic代理和无tun模式出口)(https://github.com/rustp2p/tcp_ip)
- 打洞通道处理(https://github.com/rustp2p/rustp2p/tree/master/rustp2p-core)
Languages
Rust
100%