假设网络接口 1 (net1) 和 2 (net2) 都连接到 Internet。我希望应用程序 1 (app1) 使用 net1,应用程序 2 (app2) 使用 net2。在 Windows 下如何实现?
如果您需要上述情况的具体示例,请考虑:
- 一台装有 Windows 7 的笔记本电脑
- net1 = 与 Verizon 互联网调制解调器的有线连接
- net2 = 与康卡斯特互联网调制解调器的无线连接
- app1 = Internet Explorer
- app2 = Firefox
- 我想要“IE 使用 Verizon 但不使用 Comcast”,以及“Firefox 使用 Comcast 但不使用 Verizon”
不一定非要通过路由表来完成。如果您有其他想法,请告诉我!
答案1
听上去像强制绑定IP就是你要找的 :)
ForceBindIP - 将任何 Windows 应用程序绑定到特定接口
ForceBindIP 是一款免费的 Windows 应用程序,它会将自身注入另一个应用程序并改变某些 Windows Sockets 调用的方式,从而允许您强制其他应用程序使用特定的网络接口/IP 地址。如果您处于具有多个接口的环境中,并且您的应用程序没有绑定到特定接口的选项,则此功能非常有用。
经过测试可与 ForceBindIP 配合使用的一些程序包括 DC++、uTorrent、Quake II、Quake III、Diablo II、StarCraft、Internet Explorer、Mozilla Firefox、Google Earth、Infantry、Real Player、Unreal Tournament 2004(需要 -i)、Outlook 2000(需要 -i)。无法运行的程序包括 GetRight(反调试器/分叉技术)、WinCVS(分叉 cvs.exe)
您可以简单地使用 ForceBindIP 创建快捷方式来启动应用程序,并使用 IP 地址和程序作为参数:
ForceBindIP 是免费软件。
答案2
有类似的要求,希望特定的应用程序通过特定的互联网连接运行,但无法通过 IP 或端口实现。
我的解决方案是:
(注意我的电脑ip是xxx100
a) 为 xxx101 设置 mangle 规则,使其通过 wan2
b) 在 IP xxx101 上运行 vmware player 和 ubuntulite 副本(安装了 openssh)
c)使用“proxifier”绑定应用程序并强制其通过 vmware 机器进行隧道传输,而 vmware 机器又只能通过 wan2 进行路由
这是我能在应用程序级别上找到的唯一(非常模糊的)方法(proxifier 有一个试用版,您可以测试它,它在 Windows 7 x64 上运行)。
答案3
无需运行 vmware player 等。只需在辅助适配器(即具有更高度量的适配器)上启用weakhostreceive。
然后您可以运行 squid 并将 squid 设置为使用 tcp_outgoing_address 到辅助适配器的 ip 地址并代理所有应用程序。
我怀疑 forcebindip 也应该开始起作用。
我认为 MS win7 堆栈中存在一个错误。当数据包到达辅助适配器时,即使它是一个有效数据包,也会被丢弃。
此处记录了启用弱主机接收http://technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
netsh interface ipv4 set interface [InterfaceNameOrIndex] weakhostsend=enabled|disabled
netsh interface ipv4 set interface [InterfaceNameOrIndex] weakhostreceive=enabled|disabled
netsh interface ipv6 set interface [InterfaceNameOrIndex] weakhostsend=enabled|disabled
netsh interface ipv6 set interface [InterfaceNameOrIndex] weakhostreceive=enabled|disabled
答案4
我确信这是不可能的。在一个接口或另一个接口上发送流量最接近的方式是通过子网和路由条目。
但如果两个应用程序想要在网络上通信,它们会使用同一个网络。
从技术上讲,我认为应用程序可以将其传出流量绑定到特定接口,但必须重写应用程序才能执行此操作。