各位大虾哈,有个问题:
我们以前用到一个库,恼火的是现在没有它的源文件,它作socket bind的时候,没有指定本地IP。现在我想做的是:首先给一块网卡分配多个IP(比如10个),希望改库里socket bind的行为,达到能够绑定到新配的10个IP的效果。有没办法可以做到啊?

解决方案 »

  1.   

    bind 10个IP?
    只有bind 1个IP,小伙子。
      

  2.   

    可以啊...如果仅针对你的那个库,比较简单.HOOK你那个SOCKET库中,调用的SOCKET API即可~~
      

  3.   

    网卡上配10个IP。每次作bind用一个IP,比如10个客户端哈。
      

  4.   


    谢谢。
    查了一下,理论上是通的了。可以按进程钩住bind。这种情况下,只改bind调用参数,用指定的IP替掉bind时使用的INADDR_ANY。
      

  5.   

    试验了一下SetWindowsHookEx(),可以钩到DLL中的函数。
    现在的问题是:
    程序是无窗口的,能不能用SetWindowsHookEx()挂接钩子?如果可以,idHook参数应选什么类型(WH_CALLWNDPROC之类的)?
    或者有其他变通的办法不?
      

  6.   

    我认为不应该用SetWindowsHookEx来勾IP分配的动作.
    MSDN里有说明如下:int bind(
      SOCKET s,
      const struct sockaddr* name,
      int namelen
    );
     
    DLL Requires Ws2_32.dll.  
    这样,LZ你可以把需要监控的程序中,Ws2_32模块的bind函数地址换成你的自定义函数地址,也就是HOOK API,这样一来应该就能满足你的需求了.
      

  7.   

    谢谢各位大侠的回复。特别是A_KIM,你说的简略、正确,谢谢!:-)。
    我找了个试用的HOOK API SDK(http://download.csdn.net/source/1122640)。基本按它所带说明实现即可;没有头文件不成问题,动态加载DLL即可。
    但我试这个版本的时候发现,钩的不很稳定。比如钩MessageBox()函数,如果先起钩子,再运行被钩程序,没有效果;如果先运行被钩程序,再运行钩子,则被钩程序的第一次MessageBox()调用没有钩到,以后第二、……、第N次MessageBox()被成功钩到。
    这个HOOK API SDK是要收费的,上传仅供试验:-)。