N2N组建虚拟局域网联机遇到搜不到房间的问题一例(绑定IP)

N2N 2022/07/09

之前写过

N2N组建虚拟局域网联机遇到搜不到房间的问题一例(网卡优先级)

N2N组建虚拟局域网联机遇到搜不到房间的问题一例(广播)

主要是通过 修改虚拟网卡的优先级改变全局广播数据,来解决联机中无法搜到对方房间的问题。

后来又找到一个小工具 ForceBindIP ,通过劫持系统函数,强制将程序的网络请求绑定到指定的IP地址。

原理

ForceBindIP 是一个免费的 Windows 应用程序,它将自己注入另一个应用程序并改变某些 Windows 套接字调用的方式,允许您强制另一个应用程序使用特定的网络接口/IP 地址。如果您处于具有多个接口的环境中并且您的应用程序没有绑定到特定接口的选项,这将非常有用。

ForceBindIP 分两个阶段工作 – 加载程序 ForceBindIP.exe 将加载处于挂起状态的目标应用程序。然后它将注入一个 DLL (BindIP.dll),它将 WS2_32.DLL 加载到内存中并拦截 bind()、connect()、sendto()、WSAConnect() 和 WSASendTo() 函数,将它们重定向到 DLL 中的代码验证它们将绑定到哪个接口,如果不是指定的接口,则(重新)绑定套接字。一旦函数拦截完成,目标应用程序就会恢复。请注意,当存在注入的 DLL 时,某些具有反调试器/注入技术的应用程序可能无法正常工作;对于绝大多数应用程序,尽管这种技术应该可以正常工作。

从 1.2 版开始,WS2_32.DLL 中显式或隐式绑定到接口的所有已知函数都会被拦截。但是请注意,如果某些程序实现了不使用标准 winsock 函数的连接,它们最终可能仍会使用默认接口。ForceBindIP 不会防止通过 VPN 使用应用程序时可能发生的信息泄露。例如,所有主机名查找(DNS 请求)都将通过默认网关解析,因为这些请求来自 Microsoft DNS 客户端,而不是程序。

以上机翻自官网介绍

使用

下载并解压

ForceBindIP-1.32.zip  官方下载  备用下载

EasyN2N 已集成 ForceBindIP,直接调用

用法

比如直接通过命令行启动(所有参与参与联机的朋友均需要运行

#ForceBindIP64.exe 需要绑定的IP地址 运行的程序及其命令行
#例如:
#运行CS,并将其网络请求绑定到192.168.123.112这个IP上

ForceBindIP64.exe 192.168.123.112 "E:\Cs\cstrike.exe"

其他参数

ForceBindIP还有个 -i 参数,例如:

ForceBindIP64.exe -i 192.168.123.112 "E:\Cs\cstrike.exe"

-i 参数:ForceBindIP在注入DLL之前等待一段时间,等待进程加载。可能会提高与某些应用程序的兼容性,但有可能无法捕获加载DLL之前进行的任何绑定/连接调用。

测试

我们先试试不通过 ForceBindIP,启动EasyN2N组网,直接打开CS并建房

主机

可以看到CS监听的一个临时IP,非我们联机用的虚拟IP

客户端

在B端是搜不到A端的房间的

此时我们分别在主机和客户端,均通过 ForceBindIP 强制将IP绑定到N2N的虚拟IP上,启动CS,再次搜索房间

搞定!



49条评论

  • 董哈哈 评论于 回复

    ForceBindIP64.exe -i 192.168.123.112 “E:\Cs\cstrike.exe”
    直接通过命令启动CS创建房间会卡死啊,怎么处理呢

    • Bug侠 评论于 回复

      @董哈哈
      cs不用ForceBindIP绑定也可以正常搜房加房的,文中只是测试

  • 夕阳下 评论于 回复

    请问force bind IP的guid选项有什么作用?我的朋友把guid勾上使用force bind IP时时灵时不灵,把guid去掉就好很多了?这是啥原理呀

    • Bug侠 评论于 回复

      @夕阳下
      绑定的网卡有两种选择方式,1是网卡IP(可以理解为网卡姓名),2是网卡的GUID(可以理解为身份证号)

  • Zeroex 评论于 回复

    我禁用了一些乱七八糟的网卡就行了

  • aruianhod 评论于 回复

    博主您好,我和我的朋友联机mc,之前使用时是正常的,但回校后变成使用校园网(校园网速度本身没问题)延迟就变成了300ms左右,进不了游戏。如果使用流量开热点也不行,ping他就直接失败了。请问这样该怎么解决

  • CypressMu 评论于 回复

    大佬您好,我在帝国时代3中装了IPX神器(win10)后,创建局域网房间游戏内仍然显示我的本地ip,而我装了ipx协议的朋友(win7)在游戏内显示的是N2N中的虚拟ip。他搜索不到我的房间,我可以搜索到他,但加入不了他的游戏,请问这样的情况我该怎么办?为了这个问题我们捣鼓了一天也没明白

    • CypressMu 评论于 回复

      @CypressMu
      并且游戏也是用N2N中的ForceBindIP工具启动的

    • Bug侠 评论于 回复

      @CypressMu
      我这边测试,联机的几方都先关闭防火墙,然后装上IPX,跃点数一改,就可以正常加入了,没遇到啥问题 :笑哭:

      • CypressMu 评论于 回复

        @Bug侠
        您好,我把N2N网卡跃点数调到1,其他全是9999,但是游戏还是显示我wifi的ip,不是虚拟ip要怎么破,我们已经捣鼓三天了TAT

        • fsapson 评论于 回复

          @CypressMu
          我现在遇到的问题和你的一样的,你现在这个问题解决了吗

          • CypressMu 评论于 回复

            @fsapson
            解决了,是游戏的问题,在外国论坛找了一个强制改游戏ip的程序

        • fsapson 评论于 回复

          @CypressMu
          具体的软件可以分享一下吗,谢谢

    • Bug侠 评论于 回复

      @CypressMu
      然后也没通过ForceBindIP启动 :笑哭:

      • 尤禹斯 评论于 回复

        @Bug侠
        怎么看游戏是用哪个ip的。我是无主之地2

  • 应用 评论于 回复

    可以绑定本机网卡不存在的IP呢?

  • SanRe 评论于 回复

    我玩的是一个UDP组播联机游戏 但它是一个模拟器游戏 需要用模拟器来启动程序本体
    原本模拟器里是有一个IP填写的功能但是似乎压根不生效 模拟器也是国外开发的
    我想用ForceBindIP该怎么做呢

    • Bug侠 评论于 回复

      @SanRe
      什么模拟器和游戏呢?ForceBindIP只能绑定到模拟器程序,没法绑定到模拟的游戏上去,它们之间是怎么通信的我还不清楚,但是据其他朋友反映,PPSSPP这些是支持的,比如:https://www.bilibili.com/video/BV1wW4y137rT

      • SanRe 评论于 回复

        @Bug侠
        Teknoparrot模拟器 是PC用的
        可能和游戏运行机制有关吧 目前还在各种摸索
        顺便吐槽一下udp组播游戏 真吃服务器带宽阿 :嘴锤:

  • krutos 评论于 回复

    博主您好,请问帝国时代3支持吗?测试了很多次,遇到各种各样的情况,不知道是N2N还是游戏的问题还是我的问题

  • 紫冰 评论于 回复

    要不你尝试在E语言编译得时候,用VC进行编译,是不是就不会再误报了
    一些易语言程序误报的解决方法

  • jer 评论于 回复

    博主您好,为什么我启动easyn2n之后会自动断开?

  • asd 评论于 回复

    博主您好,就是部分游戏,他的局域网,只有搜索,没有连接ip加端口的选项,使用您的方法部分游戏还是不支持,有没有什么办法可以直接把远程虚拟局域网设备添加到本地路由器网络?从而实现通过虚拟局域网搜索房间功能

  • 秃头小黄 评论于 回复

    博主您好,我朋友直接加入服务器,找到了我的房间,但是却无法加入游戏是怎么回事呢,游戏为MC

  • Karen 评论于 回复

    大佬,问一下N2N使用免费服务器和默认设置进行P2P联机超过2人就会高延迟的具体原因有哪些,我和朋友联机钢丝两人能稳定连接,三个人就开始掉线,我们三人都是百兆的宽带,不是同一个运营商。

  • 鱼香肉丝 评论于 回复

    win11 不知道为什么即便是刚重启电脑,打开也提示已经有在运行的程序了让我关闭重试。任务管理器也找不到有关的东西。请问有什么解决办法吗?

    • Bug侠 评论于 回复

      @鱼香肉丝
      是个Bug,下个版本修复(不知道啥时候了)

  • Alxi11 评论于 回复

    这种可不可以用某些重定向工具?感觉注入dll这种会出兼容问题

  • myfriendmikey 评论于 回复

    最新的EasyN2N只是3.1.1版本,已经集成了这个吗?我怎么看是3.1.2才集成捏?

    • Bug侠 评论于 回复

      @myfriendmikey
      因为忙……3.1.2还没更新,文章先更新了,但是ForcebindIP需要自己敲命令运行 :笑哭:

  • zomboss 评论于 回复

    最近玩文明6和朋友联机就遇到了这样的问题,而且那个WinIPBroadcast实际上不管用,所以经常要检查修改跃点,非常麻烦。
    后来我自己通过抓包分析游戏的局域网联机机制,发现文明6这款游戏只要广播成功发出去并被接收到就可以找到房间并建立连接,之后就不需要广播了,然后我就hook了sendto函数实现了广播的转发,然后就可以用EasyN2N了,这里非常感谢站长免费提供的软件和服务器。
    其实我写的工具和ForceBindIP原理是一样的,唯一不同的是转发udp广播到所有网卡(IP),而不是强制绑定一个IP(这个完全可以实现),当然这样不是所有游戏都适用,实际使用应该针对每个游戏都分析一下联机机制对症下药(hook不同的函数并使用不同的方法)。

    • Bug侠 评论于 回复

      @zomboss
      感谢分享~
      好久没看到这么牛逼的评论啦~ :咧嘴:

    • 猪跑 评论于 回复

      @zomboss
      你好,我想问一下文明六联机具体是怎么操作的,目前还是可以ping通搜不到房间

      • zomboss 评论于 回复

        @猪跑
        开启WinIPBroadcast,找不到房的话其实可以关了然后去改N2N用的虚拟网卡的跃点,往小了改,可以改成50、25甚至更小,然后再试试看,我也经常ping不通但不影响搜房间。如果还是不行可以考虑hook sendto函数。

    • Fane 评论于 回复

      @zomboss
      hook的是windows的WinSocket吗?

    • Fane 评论于 回复

      @zomboss
      另外需不需要注入DLL呢?

      • zomboss 评论于 回复

        @Fane
        在这回复一下两个问题
        1. 是的,实际上只要hook sendto那个函数就行了,利用sendto函数的内容进行转发(转发时必须是同一个端口,实际上文明6就是根据sendto时的端口进行接收)
        2. 需要注入DLL,这是inline hook的基础

    • 唐子峻 评论于 回复

      @zomboss
      大佬,我文明6和你的问题不一样,出现了能找得到房间,但是点进去会卡检索创建人信息,无论谁做主机都一样,换了电脑也还是不行,网络是用的路由器拨号,路由器是ax3000,开了upnp,nat类型full cone

      • peacoor zomboss 评论于 回复

        @唐子峻
        这个我也遇到过,但并不常见,所以没调试过。一个可能的原因是局域网玩家名冲突,方法是改名。当然不论如何都建议都改一下试试看,但不敢保证可以,因为这个问题比较玄学。
        否则我建议用Wireshark抓包看看情况吧。
        PS:在文件C:\Users\你的用户名\Documents\My Games\Sid Meier’s Civilization VI\UserOptions.txt里搜LANPlayerName,大概在100多行的地方,后面改名的时候可以整点花活把图标弄上去比如[icon_resource_horses]就会有一个马的图标,不过不能用太多,溢出了有bug。

  • fudingyu 评论于 回复

    星际争霸重置版用这个方法还是不行。

    • zip 评论于 回复

      @fudingyu
      可以用zerotier

  • 基地啊的 评论于 回复

    博主您好,我和朋友想进行命令与征服凯恩之怒联机。用的easyn2n最新版,打开了easyn2n中集成的WinIPBroadcast,虚拟网卡优先级也调到了最高,udp/tcp皆无问题,ping也可以ping成功,游戏中设置里选择ip也选的是虚拟ip,但在游戏中找不到房间,请问这是为什么呢?

    • Bug侠 评论于 回复

      @基地啊的
      感谢留言!不好意思,这个是N2N本身的问题。虽然看似ping通了,但是真实的联机原理和ping还是不一样的。目前除了本站列举的几个方法而外,暂时也没有其他的解决方法,还存在相当一部分游戏是不支持的。

  • VoidUnknown 评论于 回复

    博主您好,我尝试了您已经发出的三例ping通但无法看见房间的解决方式,最终仍然无法看见房间()尝试游戏有MC和RA3,请问有新的解决办法吗?

    • Bug侠 评论于 回复

      @VoidUnknown
      呃……MC确实无法主动发现房间,但可以通过直接加入服务器(填写服务器IP:端口)的方式加入;RA3实测是可以的哦

  • zed 评论于 回复

    博主您好,用eazyN2n的人多了,会不会给您的个人服务器带来压力。我了解的,不想使用平台方式,而想使用这种简单联机方式的人还蛮多的。

    • Bug侠 评论于 回复

      @zed
      随着使用的人越多,服务器肯定是有影响的。但是,已经有很多朋友开始使用P2P连接,这样就不需要服务器进行数据中转,从而在一定程度上减轻了服务器压力。所以说,目前的几台服务器都还行,没遇到瓶颈。 :萌:

    评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)关闭回复