实用技巧 截获WINSOCKET 福州大学自动化研究所 林毅 ---- TCP/IP协议是目前各网络操作系统主要的通讯协议,也是 INTERNET的通讯协议,WIN95/NT平台提供了TCP/IP协议的实现 函数库WINSOCKET(WSOCKET.DLL)动态库,因而可以利用WINSOCKET 编写基于TCP/IP协议的应用系统。(UNIX平台提供BSD-SOCKET) ---- 在实际应用开发中,我们总希望在调用正常的WINSOCKET接口 函数时,先进行各自的特殊处理,如对于开发基于WIN95/NT平台 的VPN客户端软件时,我们希望应用信息在发送前即在调用SEND函 数时,先对信息进行加密后再发送。又如有的应用系统调用CONNECT 函数进行连接请求,我们需要截获此调用,插入我们自己的身份认证。 模块,只有合法的身份,才可以调用正常的CONNECT函数,而非法的 身份则不进行CONNECT调用。因而需要开发一种截获WINSOCKET函数调用 的方法(INTERCEPT WINSOCKET),使在进行WINSOCK正常函数调用之前, 使其先调用我们的身份认证模块,加解密模块。由于在WIN95/NT平台 WINSOCKET是以动态连接库(DLL)形式提供的,应而使各种应用系统在 进行TCP/IP协议通讯时,无须任何修改,就先调用我们的应用模块, 实现应用的透明性。 ---- 一般要截获动态库(DLL)的调用,可以用HOOK(钩子技术),或外包DLL 技术,即将原来的DLL库改名(如将WINSOCK库WSOCK32.DLL改为A.DLL), 新建一个DLL库,WSOCKET32.DLL,在新的DLL库中调用旧的DLL库。 ---- 以下给出了利用VISUAL C++实现的截获WINSOCK的应用程序的源代码。Zip 4KB ---- 先将WINSOCK库WSOCK32.DLL该名为AAA.DLL,WSOCK32.AAA ---- 利用VISUAL C++创建一个DLL项目 WSOCK32.DLL ---- 目前加入的模块为一个日志处理。