实用技巧
截获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
---- 目前加入的模块为一个日志处理。