Skip to content
ecLieKingPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

双网通 DualNet

Windows 10/11 x64 便携式网卡路由助手 —— 让指定的 IPv4 设备或网段走目标网卡,其余流量继续走原来的上网出口。

适用平台:Windows 10 / 11 x64 · 运行时:.NET 8(发布包已自包含)· 当前版本:v1.4.0 · 需要管理员权限


目录


它解决什么问题

典型场景:一台电脑既要通过工控网线直连设备(设备网段如 192.168.10.0/24),又要通过 Wi-Fi、USB 网络共享或蜂窝网卡保留外网。手工添加路由、切换默认网关既繁琐又容易把整台机器断网。

双网通把这件事变成两条规则:

  • 部分流量 —— 只把指定设备或网段交给目标网卡,其余流量不受影响。
  • 全部流量 —— 让所有流量只走一张网卡,并带 60 秒确认与自动恢复保护。

程序不会检测网卡能否访问互联网,不向设备共享网络,也不安装任何驱动。

功能特性

  • 两种流量模式:部分流量(按设备 / 网段分流)与全部流量(单网卡独占),覆盖以太网、Wi-Fi、USB / 蜂窝、VPN 和虚拟网卡。
  • 灵活的规则输入:支持单个设备完整 IPv4(自动生成 /32 精确路由),也支持 192.168.10 或 192.168.10.0/24 形式的网段。
  • 本机地址自动处理:目标网卡已有同网段地址时直接复用;缺少时自动挑选未占用的地址(默认按 /24 补充)。
  • 必选其余流量出口:部分流量模式下必须选择另一张已有默认路由的网卡,作为未匹配 IPv4 流量的优先出口。
  • 明确的存在性判定:设备是否在线以指定源地址的 ARP 响应为准,Ping 仅作诊断,不会把只能 Ping 通的地址当成真实设备。
  • 事务保护与分流清理:应用失败会尝试回滚;清除分流时移除分流路由和辅助地址,将所选网卡切换为 DHCP,同时保留分流前的静态地址和手动 DNS。
  • 高风险模式双重保护:全部流量需在 60 秒内确认,否则独立的监护进程会自动恢复基线。
  • 浅色 / 深色主题,选择结果自动记忆。
  • 便携运行:单个自包含 EXE,状态文件统一放在 %LocalAppData%\DualNet,EXE 旁无需任何文件。

系统要求

项目 要求
操作系统 Windows 10 / 11 x64
权限 管理员(清单已声明 requireAdministrator,会弹出 UAC)
运行时 从发布包运行无需安装 .NET;从源码构建需 .NET 8 SDK
显示 窗口默认 1040×780,最小 900×620,支持 Per-Monitor V2 DPI

快速开始

方式一:使用发布包

  1. 获取发布 ZIP(由 scripts/publish.ps1 产出,或从 Releases 页面下载)。

  2. 解压到任意目录,其中包含 双网通.exe 和 SHA256SUMS.txt。

  3. 建议先核对哈希,再运行 双网通.exe 并允许管理员授权:

    Get-FileHash .\双网通.exe -Algorithm SHA256
  4. 程序未附带商业代码签名证书,首次运行可能出现 SmartScreen“未知发布者”提示。

方式二:从源码构建

dotnet build .\src\DualNet.App\DualNet.App.csproj -c Release

使用说明

部分流量

  1. 选择“部分流量”,再选择分流网卡(即设备所在的那张网卡)。
  2. 添加规则:单个设备 IPv4(例如 192.168.10.6)或目标网段(例如 192.168.10、192.168.10.0/24)。
  3. 选择“其余流量出口”,让未匹配的 IPv4 默认流量优先走 USB 网络共享、Wi-Fi、蜂窝或 VPN 等网卡。该网卡须已有 Windows 默认路由,且不能与分流网卡相同。
  4. 点击“应用部分流量”。

已在目标网卡配置的同网段本机地址会直接复用,缺少时自动尝试 .200/24 等未占用地址。需要说明:添加 /32 设备规则时,自动补充的本机地址仍使用 /24,因此同一 /24 内的其他地址也可能经目标网卡访问。

全部流量

  1. 选择“全部流量”,确认或填写目标网卡的 IPv4、前缀、网关和可选 DNS。
  2. 点击“应用全部流量”。其他可见网卡的 IPv4 / IPv6 会被暂时关闭。
  3. 必须在 60 秒内点击“保留此配置”,否则独立监护进程会自动恢复原网络。

此模式可能瞬间切断当前网络,请确保你仍能物理接触到这台机器。

通用操作

  • 配置更新后可点击“更新路由”,底部会显示当前处理阶段。
  • 不再需要分流时点击“清除分流并启用 DHCP”。该操作清除规则、分流路由和辅助地址,将分流网卡及其余流量出口切换为 DHCP;原有静态 IPv4 和手动 DNS 会保留。
  • 若程序异常中断,下次启动会提示恢复原始网络基线;严格模式超时也会自动恢复该基线。

安全与恢复机制

  • 原始基线:首次应用前,把可见网卡的协议绑定、DHCP、IPv4、DNS、路由和指标保存到 %LocalAppData%\DualNet\baseline.json。
  • 基线不被覆盖:重复更新不会重写原始基线,因此始终存在一个可回退的起点。
  • 失败回滚:应用过程出错会尝试自动回滚。
  • 60 秒监护:全部流量模式会启动独立监护进程,超时未确认即恢复基线。
  • DHCP 冻结:在 DHCP 网卡上添加辅助本机地址时,当前租约的地址、网关和 DNS 会临时冻结为静态配置;清除分流时删除辅助地址并重新启用 DHCP。
  • 版本迁移:旧的 v1.1 规则会迁移至部分流量模式。若旧版网络配置仍生效,请先清除分流并启用 DHCP,再应用新版。
  • 恢复路径优先:真机应用 / 恢复会实际更改路由、DHCP、IP 或协议绑定,涉及“全部流量”时还会关闭其他网卡。请始终保留恢复路径。

隐私与本地数据

  • 完全离线:代码中没有任何 HTTP 客户端、遥测或更新检查,程序不会向任何服务器发送数据。它对网络的操作分为两类:查询本机网卡与路由(PowerShell / CIM 本地调用),以及向用户指定的本地目标地址发送 ARP 请求和诊断 Ping。

  • 数据只在本机:所有状态文件都位于 %LocalAppData%\DualNet\,不写注册表,也不随仓库分发。

    文件 用途
    baseline.json 首次修改前的原始网络基线
    pending.json 尚未确认的待恢复操作
    profile.json 保存的规则配置
    ui-settings.json 主题等界面偏好
    watchdog-<id>.armed / .confirmed 60 秒监护状态
    dualnet.log 运行日志
  • 请勿提交这些文件:.gitignore 已排除构建产物与发布目录,状态文件位于仓库之外。

项目结构

dualnet/
├─ DualNet.sln
├─ README.md                    用户文档(中文)
├─ AGENTS.md                    工程信息与 AI 交接文档(英文)
├─ LICENSE                      MIT 许可证
├─ scripts/publish.ps1          打包脚本
├─ src/
│  ├─ DualNet.App/              WPF 图形界面(窗口、主题、视图模型)
│  └─ DualNet.Core/             网卡清单、路由规则、配置事务、快照与监护
├─ tests/DualNet.Tests/         MSTest 自动测试
└─ work/UiSmoke/                XAML 绑定与预览冒烟检查(不修改真实网络)
职责 位置
窗口布局、规则行、确认横幅、底部操作栏 src/DualNet.App/MainWindow.xaml
主题资源与通用控件模板 src/DualNet.App/App.xaml、Themes/
UI 状态、命令、应用 / 恢复交互 src/DualNet.App/ViewModels/
数据模型 src/DualNet.Core/Models/
参数解析、网段计算、网卡推荐 src/DualNet.Core/Networking/
配置事务、快照、60 秒监护 src/DualNet.Core/Services/

窗口 Logo 使用 App.xaml 中的矢量 DrawingImage;EXE 与任务栏图标为 src/DualNet.App/Assets/app.ico。

从源码构建

需要 .NET 8 SDK(dotnet 在 PATH 中):

# 还原并构建
dotnet build .\DualNet.sln -c Release

# 仅构建主程序
dotnet build .\src\DualNet.App\DualNet.App.csproj -c Release

src/DualNet.Core 目标框架为 net8.0,界面与冒烟工程为 net8.0-windows。

测试

自动测试位于 tests/DualNet.Tests(MSTest),共 50 个用例,覆盖 CIDR 计算与地址推荐、路由规则解析、网卡推荐、配置事务与回滚、快照存储及 PowerShell 转义。

dotnet test .\DualNet.sln -c Release

work/UiSmoke 是不触碰真实网络的 XAML 绑定与预览检查,用于验证下拉框鼠标交互、控件绑定初始化等界面行为:

dotnet run --project .\work\UiSmoke\UiSmoke.csproj -c Release

修改网络事务时请补充对应的失败与恢复测试;修改界面时请检查浅色 / 深色主题、下拉鼠标操作、900px 最小宽度、空规则状态和 60 秒确认横幅。

打包发布

.\scripts\publish.ps1 -DotNetExe 'C:\path\to\dotnet.exe' -Version '1.4.0'

脚本会发布 Windows x64 自包含单文件 EXE,生成 SHA-256 清单,并打包为 ZIP。发布包内只有 双网通.exe 与 SHA256SUMS.txt,不包含 README。注意脚本会覆盖同版本的本地发布目录和 ZIP。

若行为发生变化,请先确定新的版本号,并同步更新工程文件、应用清单、README 与发布脚本中的版本号。

已知限制

  • 全部流量模式不处理系统回环和隐藏内核接口。
  • 部分流量规则仅支持 IPv4,不涉及 IPv6 分流。
  • 不提供 VPN 管理、Internet 连接共享(ICS)或厂商专用设备发现协议。
  • 不检测目标网卡或其余流量出口的实际互联网连通性;出口选择只调整默认流量优先级,不保证真能联网。
  • “部分流量”无法保证同一 /24 内的其他地址绝不经过目标网卡。
  • 未附带代码签名证书。

常见问题

首次运行提示“未知发布者”? 程序未做商业代码签名,这是已知的交付限制。请核对随包附带的 SHA256SUMS.txt 后再运行。

应用“全部流量”后网络断了怎么办? 等待 60 秒监护自动恢复原始基线,或重新启动程序后按提示恢复。底部“清除分流并启用 DHCP”会清理分流设置,不等同于完整基线恢复。

可以删除程序了吗? 请先点击“清除分流并启用 DHCP”,确认网络状态正常,再删除程序目录。

配置文件在哪里? 全部位于 %LocalAppData%\DualNet\,详见隐私与本地数据。

相关文档

  • AGENTS.md —— 工程信息与 AI 交接文档(英文):架构与代码入口、开发与发布流程、安全与隐私约束,以及已经废弃的历史设计。

许可证

本项目采用 MIT 许可证,可自由使用、修改、商用与再分发。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages