各位大虾哈,有个问题:
我们以前用到一个库,恼火的是现在没有它的源文件,它作socket bind的时候,没有指定本地IP。现在我想做的是:首先给一块网卡分配多个IP(比如10个),希望改库里socket bind的行为,达到能够绑定到新配的10个IP的效果。有没办法可以做到啊?
我们以前用到一个库,恼火的是现在没有它的源文件,它作socket bind的时候,没有指定本地IP。现在我想做的是:首先给一块网卡分配多个IP(比如10个),希望改库里socket bind的行为,达到能够绑定到新配的10个IP的效果。有没办法可以做到啊?
只有bind 1个IP,小伙子。
谢谢。
查了一下,理论上是通的了。可以按进程钩住bind。这种情况下,只改bind调用参数,用指定的IP替掉bind时使用的INADDR_ANY。
现在的问题是:
程序是无窗口的,能不能用SetWindowsHookEx()挂接钩子?如果可以,idHook参数应选什么类型(WH_CALLWNDPROC之类的)?
或者有其他变通的办法不?
MSDN里有说明如下:int bind(
SOCKET s,
const struct sockaddr* name,
int namelen
);
DLL Requires Ws2_32.dll.
这样,LZ你可以把需要监控的程序中,Ws2_32模块的bind函数地址换成你的自定义函数地址,也就是HOOK API,这样一来应该就能满足你的需求了.
我找了个试用的HOOK API SDK(http://download.csdn.net/source/1122640)。基本按它所带说明实现即可;没有头文件不成问题,动态加载DLL即可。
但我试这个版本的时候发现,钩的不很稳定。比如钩MessageBox()函数,如果先起钩子,再运行被钩程序,没有效果;如果先运行被钩程序,再运行钩子,则被钩程序的第一次MessageBox()调用没有钩到,以后第二、……、第N次MessageBox()被成功钩到。
这个HOOK API SDK是要收费的,上传仅供试验:-)。