Skip to content

About

给没有隧道分流功能的 VPN 补上 Split Tunneling:ForceBindIP 的图形界面,一键让指定软件走本地网卡绕开 VPN,带生效验证。Windows / Python / 零第三方依赖

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

VPN 分流助手

给没有「隧道分流 / Split Tunneling」功能的 VPN 补上这个能力:开着 VPN 的时候,让指定的软件走本地物理网卡,绕开 VPN。

底层用的是 ForceBindIP,本工具是它的图形界面。

Windows 10/11 · Python 3.8+ · 零第三方依赖 · 可打包成单文件 exe

主界面


它解决什么问题

开着 VPN,电脑上所有软件的流量默认都走 VPN。但有些软件你并不想让它走:

类型 为什么不该走 VPN
远程桌面、ToDesk、向日葵、GameViewer 要连内网机器,走 VPN 连不上或者极慢
百度网盘、迅雷、Motrix 走 VPN 跑不满速度
微信、QQ、钉钉 容易触发异地登录告警

NordVPN 那种「分流」就是干这个的。你的 VPN 没有,就用这个工具。

原来要怎么做

:: 1. 查本地网卡 IP
ipconfig

:: 2. 以管理员身份打开 CMD
cd "C:\Program Files (x86)\ForceBindIP"
ForceBindIP64.exe 192.168.0.133 "D:\Softwares\Todesk\ToDesk.exe"
ForceBindIP64.exe 192.168.0.133 "C:\Program Files\Netease\GameViewer\GameViewer.exe"

每加一个软件粘一行,IP 变了全部作废,而且做完不知道到底生没生效。

现在怎么做

双击 run.bat → 勾选软件 → 点「用本地网络启动选中项」→ 点「验证选中项是否生效」。


安装

1. 装 ForceBindIP(一次性,约 100KB)

从 https://r1ch.net/projects/forcebindip 下载安装,默认装到 C:\Program Files (x86)\ForceBindIP。 本工具会自动找到它,找不到时可以手动指定目录。

2. 跑本工具

需要 Python 3.8+(自带 tkinter 即可,不需要 pip install 任何东西)。

双击 run.bat

或者直接:

python vpnblocker.py

程序会自动弹 UAC 请求管理员权限。

3.(可选)自己打包便携版

python make_portable.py

会自动下载官方 embeddable Python、从本机 Python 里补上 tkinter、连同源码一起打成 dist\VPNBlocker-portable.zip(解压后约 29 MB,压缩包约 14 MB)。 本机 Python 大版本必须和脚本顶部的 EMBED_VERSION 一致,否则 tkinter 的二进制对不上。

发布到 Release 时附件名保持 VPNBlocker-portable.zip 不变,下面那个 latest/download 直链才会一直有效。

build.bat 是老的 PyInstaller 单文件方案,仍然可用,但产物会被 Defender 误报(见下),不建议拿来分发。


懒人通道:不想装 Python,下载便携版

⬇ 下载便携版 VPNBlocker-portable.zip  · 查看全部版本

压缩包约 14 MB,里面带了官方的 Python 运行时。解压 → 双击 run.bat 就能用,本机什么都不用装。

VPNBlocker-portable\
├── run.bat            ← 双击这个
├── 使用说明.txt
├── app\               ← 程序源码,可以自己看
└── python\            ← 官方 embeddable Python + tkinter

还是要先装 ForceBindIP(上面第 1 步)。便携版只免掉了 Python,没免掉 ForceBindIP。

为什么是绿色包而不是单个 exe?因为 PyInstaller 打出来的 exe 会被 Windows Defender 误判成 Trojan:Win32/Sabsik.TE.A!ml 直接拦截 —— 这是 PyInstaller 引导程序的已知误报, 和本项目代码无关。便携版跑的是 Python 软件基金会签名的 pythonw.exe,不触发这条规则, UAC 弹窗还会显示「已验证的发布者:Python Software Foundation」。

(想自己打 exe 的话 build.bat 还在,但产物大概率会被杀软拦,不建议用来分发。)


使用

① 本地网卡

打开就自动选好了 —— 程序会枚举所有网卡,排掉 VPN 虚拟网卡(TAP / OpenVPN / WireGuard)、 Hyper-V 和 WSL 虚拟交换机、蓝牙、回环,只留下真正在上网的物理网卡。

绑定方式建议保持默认的「网卡 GUID」:GUID 是网卡的唯一标识,路由器重新分配 IP 也不会失效。 选「IP 地址」的话,IP 一变就得重新设置。

「兼容模式 -i」是 ForceBindIP 的一个开关,少数软件需要它才能绑定成功。默认不勾, 如果某个软件启动后验证显示没生效,勾上再试一次。

② 添加软件

四种方式,随便用哪种:

  • + 添加软件 → 从正在运行的程序里选 —— 列出当前有窗口的程序,像 NordVPN 那样勾选
  • + 添加软件 → 浏览 exe 文件 —— 标准的文件选择框,可多选
  • + 添加软件 → 粘贴完整路径 —— 直接把路径粘进去
  • 扫描已安装软件 —— 扫开始菜单 + 注册表 + 运行中进程,★ 标记的是推荐分流的软件
  • 也可以直接把 exe 拖进窗口

扫描已安装软件:

扫描已安装软件

从正在运行的程序里选(上面的搜索框可以过滤):

从正在运行的程序里选

第一次运行会自动加上并勾选远程桌面 mstsc.exe —— 开着 VPN 上外网、同时远程连内网机器, 是最常见的分流需求。

③ 启动和验证

勾选之后点「▶ 用本地网络启动选中项」。日志里会打印实际执行的完整命令,方便你对照排错。

必须通过这个工具启动才有效。 绑定是在程序启动那一刻完成的,你双击桌面图标启动的软件不受本工具管。 如果软件已经在运行,工具会提示你先结束再启动(微信、ToDesk 这类单实例软件尤其重要 —— 直接再启动只会唤起旧窗口,绑定不会生效)。

启动后在软件里做一次联网操作,再点「✔ 验证选中项是否生效」。工具会查这个进程的 TCP/UDP 端点, 看本地地址是不是你选的那张网卡:

结果 含义
✔ 走本地 确认绑定成功
× 没走本地 没绑上,仍然走默认路由(VPN)。会告诉你实际绑到哪张网卡了
! 走本机代理 这个软件连的是 127.0.0.1:xxxx,走的是本地代理,ForceBindIP 管不到(见下)
暂时看不出来 进程还没产生带具体地址的连接,先在软件里点一下联网操作

启动并验证

日志第一行就是实际执行的 ForceBindIP 命令,出问题时可以直接照着它到 CMD 里复现。 (截图里的「演示程序」是截图用的测试进程,实际使用时这里就是 ToDesk、微信这些。)

不知道怎么用可以点右上角「使用说明」,里面写清楚了原理、步骤和限制:

使用说明


已知局限

这些是 ForceBindIP 本身的限制,不是本工具的 bug:

  • DNS 可能泄漏。 ForceBindIP 只绑定程序自己的 socket,DNS 查询仍然走系统默认网关(可能是 VPN)。 绝大多数场景没影响;如果你要求连 DNS 都不能泄漏,ForceBindIP 做不到。
  • 对本地代理型 VPN 无效。 如果你用的是 Clash / v2ray 这种模式(软件连的是 127.0.0.1:7890), 真正对外发包的是代理程序,不是这个软件,绑定它没有意义。要在代理软件的规则里放行, 或者在该软件里关掉代理。验证功能会明确告诉你是不是这种情况。 Clash 的 TUN 模式是虚拟网卡,属于本工具能处理的范围。
  • 反注入的程序会失败。 带反调试/反作弊保护的程序(不少游戏)会拒绝 DLL 注入。
  • 子进程不一定继承绑定。 会自己拉起子进程的软件,子进程可能仍然走 VPN。
  • 被启动的软件继承管理员权限。 副作用:以管理员运行的微信、百度网盘, 没法直接从资源管理器把文件拖进去。

文件说明

文件 作用
vpnblocker.py 程序入口 + 主窗口
netinfo.py 网卡枚举、VPN/虚拟网卡过滤
forcebind.py 定位 ForceBindIP、读 PE 头判 32/64 位、启动并回查目标 PID
procinfo.py ctypes 进程枚举、按路径查 PID、结束进程
verify.py 查 TCP/UDP 端点判断流量走哪张网卡
appscan.py 扫描已安装软件
appconfig.py 配置读写
dnd.py ctypes 实现的文件拖放
dialogs.py 各种弹窗
winutil.py PowerShell 调用封装
run.bat 双击运行(需要本机装了 Python)
make_portable.py 组装便携版 zip(自带 Python 运行时)
build.bat 老的 PyInstaller 单文件方案,会被杀软误报,保留备用
img/ README 用的截图

配置文件在 %APPDATA%\VPNBlocker\config.json。

依赖

只用 Python 标准库(tkinter / ctypes / winreg / subprocess)。零第三方依赖。

打包才需要 pyinstaller,build.bat 会自动装。

实测

在 Windows 11 + Python 3.11.9 上验证过:

  • 绑定到以太网 GUID → 程序 socket 的本地地址是 192.168.0.133,连接正常
  • 绑定到 Hyper-V 虚拟交换机 GUID → 本地地址变成 172.24.192.1,连接报「网络不可达」

也就是说 IP 和 GUID 两种绑定方式都真实生效,验证功能能如实反映绑定结果。

致谢

核心能力来自 ForceBindIP(作者 Richard Stanway), 本项目只是给它做了一个好用的图形界面,不包含也不分发 ForceBindIP 本身。

许可

MIT

About

给没有隧道分流功能的 VPN 补上 Split Tunneling:ForceBindIP 的图形界面,一键让指定软件走本地网卡绕开 VPN,带生效验证。Windows / Python / 零第三方依赖

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages