关于替换wsock32.dll和ws2_32.dll

mme 2003-04-13 05:16:11
在别人的文章中,我找到了替换wsock32.dll的源代码,用来监控所有的socket,源代码在:
http://www.vchelp.net/vchelp/zsrc/wsock32_sub.zip
可是,我用来改成替换ws2_32.dll就不行了.
问题是它在调用socket时会返回-1失败,大家请试试我的代码,看看问题出在哪里?!
//下面是文件ws2_32.def
LIBRARY "ws2_32.dll"
EXPORTS


accept @1
bind @2
closesocket @3
connect @4
getsockname @6
getsockopt @7
htonl @8
htons @9
ioctlsocket @10
inet_addr @11
inet_ntoa @12
listen @13
ntohl @14
ntohs @15
recv @16
recvfrom @17
select @18
send @19
sendto @20
setsockopt @21
shutdown @22
socket @23
WSAAccept @26
WSAConnect @30
WSACreateEvent @31
WSAEventSelect @39
WSAHtonl @46
WSAHtons @47
WSAIoctl @50
gethostbyaddr @51
gethostbyname @52
getprotobyname @53
getprotobynumber @54
getservbyname @55
getservbyport @56
gethostname @57
WSANtohl @64
WSANtohs @65
WSARecv @67
WSARecvDisconnect @68
WSARecvFrom @69
WSAResetEvent @71
WSASend @72
WSASendDisconnect @73
WSASendTo @74

WSASetEvent @75
WSASocketA @78
WSASocketW @79
WSAWaitForMultipleEvents @82
WSAAsyncSelect @101
WSAGetLastError @111
WSASetLastError @112
WSAIsBlocking @114
WSAStartup @115
WSACleanup @116
__WSAFDIsSet @151







...全文
528 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mme 2003-04-15
  • 打赏
  • 举报
回复
呵呵,谢谢了,结贴了
wjl_2001 2003-04-15
  • 打赏
  • 举报
回复
我要:WJL_2001@21CN.COM
THanks
收到补分给你好吗?
huangbeyond 2003-04-15
  • 打赏
  • 举报
回复
WJL_2001@21CN.COM
邮箱不能用.
huangbeyond 2003-04-15
  • 打赏
  • 举报
回复
已发送,请查收
mme 2003-04-14
  • 打赏
  • 举报
回复
呵呵,好啊,谢谢了 huangbeyond(校园人渣)
我的邮箱是:
huanghaiheng@163.net
wzswgbx 2003-04-14
  • 打赏
  • 举报
回复
我也要,给我一分好吗?
WJL_2001163@163.COM
zhabj925 2003-04-14
  • 打赏
  • 举报
回复
太好了,总算找到有关SPI的信息了。能把相关书的源代码寄给我吗?
zhabj@wz163.com

请到“寻SPI技术资料”贴,我给分。
huangbeyond 2003-04-14
  • 打赏
  • 举报
回复
to mme(dog)

SPI其实是一种HOOK技术.你需要自己编写一个DLL,其中实现了SPI的技术.它在相当于是一个叠置在wsock32.dll之上的HOOK,并第一个接管了应用程序对winsockAPI的调用,所以,它能够拦截WinsockAPI!
其实,它使用的是Windows标准技术,所以,在升级或者是版本更新上也具有充分的兼容和扩展性.

强力推荐: <Windows网络编程技术>,里面非常详细地介绍了该技术.
此外,<Windows防火墙与网络封包截获技术>也详细介绍了该技术.如果你需要,我可以把相关书的源代码寄给你.

//在单位我早已经实现了SPI,只是代码在单位,拿不出来的,呵呵
mme 2003-04-13
  • 打赏
  • 举报
回复
不,那个例子是替换wsock32.dll的,
而我想替换ws2_32.dll,所以换了一点代码,几乎没变什么.

to : huangbeyond(校园人渣)

spi怎么弄,有空的话就说说吧!
qrlvls 2003-04-13
  • 打赏
  • 举报
回复
to upstair:
What's SPI

不是人家已经有替换DLL的代码的吗干嘛还要自己做
huangbeyond 2003-04-13
  • 打赏
  • 举报
回复
为什么还要使用"DLL替换"技术?!

应该选择SPI技术!!
shines77 2003-04-13
  • 打赏
  • 举报
回复
推~~~
mme 2003-04-13
  • 打赏
  • 举报
回复
太长啦!
得一次次地分开来贴,真累人^_^
mme 2003-04-13
  • 打赏
  • 举报
回复
//下面是文件WS2_32.H

HMODULE ii=NULL;
HMODULE i=NULL;
char aa[1000];
char msg[1000];

sockaddr_in *sin;



FARPROC a;
DWORD d;



typedef SOCKET (PASCAL FAR *WSAAccept0)(SOCKET s,
struct sockaddr FAR * addr,
LPINT addrlen,
LPCONDITIONPROC lpfnCondition,
DWORD dwCallbackData );
WSAAccept0 WSAAccept1;

typedef int (PASCAL FAR *WSAAsyncSelect0)(SOCKET s, HWND hWnd, u_int wMsg,long lEvent);
WSAAsyncSelect0 WSAAsyncSelect1;

typedef int (PASCAL FAR *WSACleanup0)(void);
WSACleanup0 WSACleanup1;

typedef int (PASCAL FAR *WSAConnect0)(
SOCKET s,
const struct sockaddr FAR * name,
int namelen,
LPWSABUF lpCallerData,
LPWSABUF lpCalleeData,
LPQOS lpSQOS,
LPQOS lpGQOS
);
WSAConnect0 WSAConnect1;

typedef WSAEVENT (PASCAL FAR *WSACreateEvent0)(void);
WSACreateEvent0 WSACreateEvent1;

typedef int (PASCAL FAR *WSAEventSelect0)(SOCKET s,WSAEVENT hEventObject,long lNetworkEvents );
WSAEventSelect0 WSAEventSelect1;

typedef int (PASCAL FAR *WSAGetLastError0)(void );
WSAGetLastError0 WSAGetLastError1;

typedef int (PASCAL FAR *WSAHtonl0)(SOCKET s,u_long hostlong, u_long FAR * lpnetlong);
WSAHtonl0 WSAHtonl1;

typedef int (PASCAL FAR *WSAHtons0)(SOCKET s,u_short hostshort, u_short FAR * lpnetshort );
WSAHtons0 WSAHtons1;

typedef int (PASCAL FAR *WSAIoctl0)(
SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOutBuffer,
DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
WSAIoctl0 WSAIoctl1;

typedef BOOL (PASCAL FAR *WSAIsBlocking0)(void);
WSAIsBlocking0 WSAIsBlocking1;

typedef int (PASCAL FAR *WSANtohl0)(SOCKET s, u_long netlong,u_long FAR * lphostlong);
WSANtohl0 WSANtohl1;

typedef int (PASCAL FAR *WSANtohs0)(SOCKET s, u_short netshort,u_short FAR * lphostshort);
WSANtohs0 WSANtohs1;

typedef int (PASCAL FAR *WSARecv0)(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
WSARecv0 WSARecv1;

typedef int (PASCAL FAR *WSARecvDisconnect0)(SOCKET s, LPWSABUF lpInboundDisconnectData);
WSARecvDisconnect0 WSARecvDisconnect1;

typedef int (PASCAL FAR *WSARecvFrom0)(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
struct sockaddr FAR * lpFrom,
LPINT lpFromlen,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
WSARecvFrom0 WSARecvFrom1;

typedef int (PASCAL FAR *WSAResetEvent0)( WSAEVENT hEvent );
WSAResetEvent0 WSAResetEvent1;

typedef int (PASCAL FAR *WSASend0)(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
WSASend0 WSASend1;

typedef int (PASCAL FAR *WSASendDisconnect0)( SOCKET s,LPWSABUF lpOutboundDisconnectData);
WSASendDisconnect0 WSASendDisconnect1;

typedef int (PASCAL FAR
*WSASendTo0)(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
const struct sockaddr FAR * lpTo,
int iTolen,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
WSASendTo0 WSASendTo1;

typedef BOOL (PASCAL FAR *WSASetEvent0)( WSAEVENT hEvent);
WSASetEvent0 WSASetEvent1;

typedef void (PASCAL FAR *WSASetLastError0)( int iError );
WSASetLastError0 WSASetLastError1;

typedef SOCKET (PASCAL FAR *
WSASocketA0)(
int af,
int type,
int protocol,
LPWSAPROTOCOL_INFOA lpProtocolInfo,
GROUP g,
DWORD dwFlags
);
WSASocketA0 WSASocketA1;

typedef SOCKET (PASCAL FAR *
WSASocketW0)(
int af,
int type,
int protocol,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
GROUP g,
DWORD dwFlags
);
WSASocketW0 WSASocketW1;

typedef int (PASCAL FAR *WSAStartup0)(WORD wVersionRequired, LPWSADATA lpWSAData);
WSAStartup0 WSAStartup1;

typedef DWORD (PASCAL FAR *
WSAWaitForMultipleEvents0)(
DWORD cEvents,
const WSAEVENT FAR * lphEvents,
BOOL fWaitAll,
DWORD dwTimeout,
BOOL fAlertable
);
WSAWaitForMultipleEvents0 WSAWaitForMultipleEvents1;

typedef int (PASCAL FAR *__WSAFDIsSet0)(SOCKET p,fd_set FAR *q);
__WSAFDIsSet0 __WSAFDIsSet1;

typedef SOCKET (PASCAL FAR *accept0) (SOCKET s, struct sockaddr FAR *addr,int FAR *addrlen);
accept0 accept1;

typedef int (PASCAL FAR *bind0)(SOCKET s, const struct sockaddr FAR *addr, int namelen);
bind0 bind1;

typedef int (PASCAL FAR *closesocket0)(SOCKET s);
closesocket0 closesocket1;

typedef int (PASCAL FAR *connect0)(SOCKET s,const struct sockaddr *name, int namelen);
connect0 connect1;

typedef struct hostent FAR * (PASCAL FAR *gethostbyaddr0)(const char FAR * addr,int len, int type);
gethostbyaddr0 gethostbyaddr1;

typedef struct hostent * (PASCAL FAR *gethostbyname0)(const char FAR * name);
gethostbyname0 gethostbyname1;

typedef int (PASCAL FAR *gethostname0) (char FAR * name, int namelen);
gethostname0 gethostname1;

typedef struct protoent FAR * (PASCAL FAR *getprotobyname0)(const char FAR * name);
getprotobyname0 getprotobyname1;

typedef struct protoent FAR * (PASCAL FAR *getprotobynumber0)(int proto);
getprotobynumber0 getprotobynumber1;

typedef struct servent FAR * (PASCAL FAR *getservbyname0)(const char FAR * name,const char FAR * proto);
getservbyname0 getservbyname1;

typedef struct servent FAR * (PASCAL FAR *getservbyport0)(int port, const char FAR * proto);
getservbyport0 getservbyport1;

typedef int (PASCAL FAR *getsockname0)(SOCKET s, struct sockaddr *name,int * namelen);
getsockname0 getsockname1;

typedef int (PASCAL FAR *getsockopt0)(SOCKET s,int level,int optname,char * optval, int *optlen);
getsockopt0 getsockopt1;

typedef u_long (PASCAL FAR *htonl0)(u_long hostlong);
htonl0 htonl1;

typedef u_short (PASCAL FAR *htons0) (u_short hostshort);
htons0 htons1;

typedef unsigned long (PASCAL FAR *inet_addr0)(const char FAR * cp);
inet_addr0 inet_addr1;

typedef char * (PASCAL FAR *inet_ntoa0) (struct in_addr in);
inet_ntoa0 inet_ntoa1;

typedef int (PASCAL FAR *ioctlsocket0)(SOCKET s, long cmd, u_long FAR *argp);
ioctlsocket0 ioctlsocket1;

typedef int (PASCAL FAR *listen0) (SOCKET s, int backlog);
listen0 listen1;

typedef u_long (PASCAL FAR *ntohl0) (u_long netlong);
ntohl0 ntohl1;

typedef u_short (PASCAL FAR *ntohs0)(u_short netshort);
ntohs0 ntohs1;

typedef int (PASCAL FAR *recv0)(SOCKET s, char FAR * buf, int len, int flags);
recv0 recv1;

typedef int (PASCAL FAR *recvfrom0) (SOCKET s, char FAR * buf, int len, int flags,struct sockaddr FAR *from, int FAR * fromlen);
recvfrom0 recvfrom1;

typedef int (PASCAL FAR *select0)(int nfds, fd_set FAR *readfds, fd_set FAR *writefds,fd_set FAR *exceptfds, const struct timeval FAR *timeout);
select0 select1;

typedef int (PASCAL FAR *send0)(SOCKET s,const char * buf,int len,int flags);
send0 send1;

typedef int (PASCAL FAR *sendto0) (SOCKET s, const char FAR * buf, int len, int flags,const struct sockaddr FAR *to, int tolen);
sendto0 sendto1;

typedef int (PASCAL FAR *setsockopt0)(SOCKET s,int level,int optname,const char * optval,int optlen);
setsockopt0 setsockopt1;

typedef int (PASCAL FAR *shutdown0) (SOCKET s, int how);
shutdown0 shutdown1;

typedef SOCKET (WSAAPI *socket0)( IN int af,IN int type,IN int protocol );
socket0 socket1;
mme 2003-04-13
  • 打赏
  • 举报
回复
//接上
DWORD PASCAL FAR
WSAWaitForMultipleEvents(
DWORD cEvents,
const WSAEVENT FAR * lphEvents,
BOOL fWaitAll,
DWORD dwTimeout,
BOOL fAlertable
)
{
SaveRecord("WSAWaitForMultipleEvents");
return WSAWaitForMultipleEvents1(
cEvents,
lphEvents,
fWaitAll,
dwTimeout,
fAlertable
);
}

int PASCAL FAR __WSAFDIsSet(SOCKET p,fd_set FAR *q)
{
SaveRecord("__WSAFDIsSet");
return __WSAFDIsSet1(p,q);
}

SOCKET PASCAL FAR accept (SOCKET s, struct sockaddr FAR *addr,int FAR *addrlen)
{
char disp[64];
SOCKET rc;
sockaddr_in *sin;
rc = accept1(s, addr,addrlen);
sin =(sockaddr_in *)addr;
LPCSTR psz=inet_ntoa1(sin->sin_addr);
wsprintf(disp,"accept,ip=%s:%d socket=%d",psz,ntohs1(sin->sin_port),rc);
SaveRecord(disp);
return rc;
}

int PASCAL FAR bind(SOCKET s, const struct sockaddr FAR *addr, int namelen)
{
SaveRecord("bind");
return bind1(s,addr,namelen);
}

int PASCAL FAR closesocket(SOCKET s)
{
SaveRecord("closesocket");
return closesocket1(s);
}

int PASCAL FAR connect(SOCKET s,const struct sockaddr *name, int namelen)
{
int rc;
sin =(sockaddr_in *)name;
LPCSTR psz=inet_ntoa1(sin->sin_addr);
wsprintf(msg,"connect,ip=%s:%d socket=%d",psz,ntohs1(sin->sin_port),s);
SaveRecord(msg);
rc = connect1(s,name,namelen);
return rc;
}

struct hostent FAR * PASCAL FAR gethostbyaddr(const char FAR * addr,int len, int type)
{
SaveRecord("gethostbyaddr");
return gethostbyaddr1(addr, len, type);
}

struct hostent * PASCAL FAR gethostbyname(const char FAR * name)
{
char disp[512];
PHOSTENT hostinfo;
if((hostinfo = gethostbyname1(name)) != NULL){
LPCSTR ip = inet_ntoa1 (*(struct in_addr *)*hostinfo->h_addr_list);
wsprintf(disp,"gethostbyname(hostname:%s,addr:%s)",name,ip);
}
else
wsprintf(disp,"gethostbyname(hostname:%s)",name);
SaveRecord(disp);
return hostinfo;
}

int PASCAL FAR gethostname (char FAR * name, int namelen)
{
int rc;
char disp[256];
rc = gethostname1 (name, namelen);
if(rc==0){
wsprintf(disp,"gethostname(hostname:%s)",name);
SaveRecord(disp);
}else
SaveRecord("gethostname(return error)");
return rc;
}

struct protoent FAR * PASCAL FAR getprotobyname(const char FAR * name)
{
SaveRecord("getprotobyname");
return getprotobyname1(name);
}

struct protoent FAR * PASCAL FAR getprotobynumber(int proto)
{
SaveRecord("getprotobynumber");
return getprotobynumber1(proto);
}

struct servent FAR * PASCAL FAR getservbyname(const char FAR * name,const char FAR * proto)
{
SaveRecord("getservbyname");
return getservbyname1( name, proto);;
}

struct servent FAR * PASCAL FAR getservbyport(int port, const char FAR * proto)
{
SaveRecord("getservbyport");
return getservbyport1(port, proto);
}

int PASCAL FAR getsockname(SOCKET s, struct sockaddr *name,int * namelen)
{
int rc;
char disp[512];
sockaddr_in *sin;
rc = getsockname1(s,name,namelen);
sin =(sockaddr_in *)name;
LPCSTR psz=inet_ntoa1(sin->sin_addr);
wsprintf(disp,"getsockname(addr:%s,port:%d)",psz,ntohs1(sin->sin_port));
SaveRecord(disp);
return rc;
}

int PASCAL FAR getsockopt(SOCKET s,int level,int optname,char * optval, int *optlen)
{
SaveRecord("getsockopt");
return getsockopt1(s,level,optname,optval,optlen);
}

u_long PASCAL FAR htonl(u_long hostlong)
{
SaveRecord("htonl");
return htonl1(hostlong);
}

u_short PASCAL FAR htons (u_short hostshort)
{
SaveRecord("htons");
return htons1(hostshort);
}

unsigned long PASCAL FAR inet_addr(const char FAR * cp)
{
unsigned long rc;
char disp[64];
rc = inet_addr1(cp);
wsprintf(disp,"inet_addr(%s)",cp);
SaveRecord(disp);
return rc;
}

char * PASCAL FAR inet_ntoa (struct in_addr in)
{
SaveRecord("inet_ntoa");
return inet_ntoa1(in);
}

int PASCAL FAR ioctlsocket(SOCKET s, long cmd, u_long FAR *argp)
{
SaveRecord("ioctlsocket");
return ioctlsocket1(s,cmd,argp);
}

int PASCAL FAR listen (SOCKET s, int backlog)
{
SaveRecord("listen");
return listen1(s, backlog);
}

u_long PASCAL FAR ntohl (u_long netlong)
{
SaveRecord("ntohl");
return ntohl1 (netlong);
}

u_short PASCAL FAR ntohs(u_short netshort)
{
SaveRecord("ntohs");
return ntohs1(netshort);
}

int PASCAL FAR recv(SOCKET s, char FAR * buf, int len, int flags)
{
int rc;
//SaveRecord("recv ");
rc = recv1(s, buf, len, flags);
if(rc<0) return rc;
SaveRecvData((int)s, buf, rc);
return rc;
}

int PASCAL FAR recvfrom (SOCKET s, char FAR * buf, int len, int flags,struct sockaddr FAR *from, int FAR * fromlen)
{
int rc;
sockaddr_in *sin;
rc = recvfrom1(s, buf, len, flags, from, fromlen);
sin =(sockaddr_in *)from;
LPCSTR psz=inet_ntoa1(sin->sin_addr);
SaveRecvfromData((char *)psz,ntohs1(sin->sin_port),buf, rc);
return rc;
}

int PASCAL FAR select(int nfds, fd_set FAR *readfds, fd_set FAR *writefds,fd_set FAR *exceptfds, const struct timeval FAR *timeout)
{
SaveRecord("select");
return select1(nfds,readfds,writefds,exceptfds,timeout);
}

int PASCAL FAR send(SOCKET s,const char * buf,int len,int flags)
{
int rc;
rc = send1(s,buf,len,flags);
SaveSendData((int)s, (char *)buf, rc);
return rc;
}

int PASCAL FAR sendto (SOCKET s, const char FAR * buf, int len, int flags,const struct sockaddr FAR *to, int tolen)
{
int rc;
sockaddr_in *sin;
rc = sendto1 (s, buf, len, flags,to, tolen);
sin =(sockaddr_in *)to;
LPCSTR psz=inet_ntoa1(sin->sin_addr);
SaveSendtoData((char *)psz,ntohs1(sin->sin_port),(unsigned char *)buf, rc);
return rc;
}

int PASCAL FAR setsockopt(SOCKET s,int level,int optname,const char * optval,int optlen)
{
SaveRecord("setsockopt");
return setsockopt1(s,level,optname,optval,optlen);
}

int PASCAL FAR shutdown (SOCKET s, int how)
{
SaveRecord("shutdown");
return shutdown1( s, how);
}


SOCKET WSAAPI socket( IN int af,IN int type,IN int protocol )
{
char disp[64];
SOCKET rc;
rc = socket1(af,type,protocol);
wsprintf(disp,"socket(af:%d,type:%d,proto:%d) rc=%d",af,type,protocol,rc);
SaveRecord(disp);
return rc;
}
mme 2003-04-13
  • 打赏
  • 举报
回复
//接上
SOCKET PASCAL FAR WSAAccept(SOCKET s,
struct sockaddr FAR * addr,
LPINT addrlen,
LPCONDITIONPROC lpfnCondition,
DWORD dwCallbackData )
{
char disp[64];
SOCKET rc;
sockaddr_in *sin;
rc = WSAAccept1(s, addr,addrlen,lpfnCondition,dwCallbackData);
sin =(sockaddr_in *)addr;
LPCSTR psz=inet_ntoa1(sin->sin_addr);
wsprintf(disp,"WSAAccept,ip=%s:%d socket=%d",psz,ntohs1(sin->sin_port),rc);
SaveRecord(disp);
return rc;
}

int PASCAL FAR WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg,long lEvent)
{
char disp[128];
int rc;
rc = WSAAsyncSelect1(s,hWnd,wMsg,lEvent);
wsprintf(disp,"WSAAsyncSelect(s=%d,hWnd,wMsg=%d,lEvent=%ld),rc=%d",s,wMsg,lEvent,rc);
SaveRecord(disp);
return rc;
}

int PASCAL FAR WSACleanup(void)
{
SaveRecord("WSACleanup");
return WSACleanup1();
}

int PASCAL FAR WSAConnect(
SOCKET s,
const struct sockaddr FAR * name,
int namelen,
LPWSABUF lpCallerData,
LPWSABUF lpCalleeData,
LPQOS lpSQOS,
LPQOS lpGQOS
)
{
int rc;
sin =(sockaddr_in *)name;
LPCSTR psz=inet_ntoa1(sin->sin_addr);
wsprintf(msg,"WSAConnect,ip=%s:%d socket=%d",psz,ntohs1(sin->sin_port),s);
SaveRecord(msg);
rc = WSAConnect1(s,name,namelen,lpCallerData,lpCalleeData,lpSQOS,lpGQOS);
return rc;
}

WSAEVENT PASCAL FAR WSACreateEvent(void)
{
SaveRecord("WSACreateEvent");
return WSACreateEvent1();
}

int PASCAL FAR WSAEventSelect(SOCKET s,WSAEVENT hEventObject,long lNetworkEvents )
{
SaveRecord("WSAEventSelect");
return WSAEventSelect1(s,hEventObject,lNetworkEvents);
}

int PASCAL FAR WSAGetLastError(void )
{
d=WSAGetLastError1();
sprintf(aa,"WSAGetLastError %d",d);
SaveRecord(aa);
return d;
}

int PASCAL FAR WSAHtonl(SOCKET s,u_long hostlong, u_long FAR * lpnetlong)
{
SaveRecord("WSAHtonl");
return WSAHtonl1(s, hostlong, lpnetlong);
}

int PASCAL FAR WSAHtons(SOCKET s,u_short hostshort, u_short FAR * lpnetshort )
{
SaveRecord("WSAHtons");
return WSAHtons1(s, hostshort, lpnetshort);
}

int PASCAL FAR WSAIoctl(
SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOutBuffer,
DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{
SaveRecord("WSAIoctl");
return WSAIoctl1(
s,
dwIoControlCode,
lpvInBuffer,
cbInBuffer,
lpvOutBuffer,
cbOutBuffer,
lpcbBytesReturned,
lpOverlapped,
lpCompletionRoutine
);
}

BOOL PASCAL FAR WSAIsBlocking(void)
{
SaveRecord("WSAIsBlocking");
return WSAIsBlocking1();
}

int PASCAL FAR WSANtohl(SOCKET s, u_long netlong,u_long FAR * lphostlong)
{
SaveRecord("WSANtohl");
return WSANtohl1(s,netlong,lphostlong);
}

int PASCAL FAR WSANtohs(SOCKET s, u_short netshort,u_short FAR * lphostshort)
{
SaveRecord("WSANtohs");
return WSANtohs1(s,netshort,lphostshort);
}

int PASCAL FAR WSARecv(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{
int rc;
SaveRecord("WSARecv");
rc = WSARecv1(
s,
lpBuffers,
dwBufferCount,
lpNumberOfBytesRecvd,
lpFlags,
lpOverlapped,
lpCompletionRoutine
);
if(rc<0) return rc;
return rc;
}

int PASCAL FAR WSARecvDisconnect(SOCKET s, LPWSABUF lpInboundDisconnectData)
{
SaveRecord("WSARecv");
return WSARecvDisconnect1(s, lpInboundDisconnectData);
}

int PASCAL FAR WSARecvFrom(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
struct sockaddr FAR * lpFrom,
LPINT lpFromlen,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{
return WSARecvFrom1(
s,
lpBuffers,
dwBufferCount,
lpNumberOfBytesRecvd,
lpFlags,
lpFrom,
lpFromlen,
lpOverlapped,
lpCompletionRoutine
);
}

int PASCAL FAR WSAResetEvent( WSAEVENT hEvent )
{
SaveRecord("WSARecv");
return WSAResetEvent1(hEvent);
}

int PASCAL FAR WSASend(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{
int rc;
SaveRecord("WSASend");
rc = WSASend1(
s,
lpBuffers,
dwBufferCount,
lpNumberOfBytesSent,
dwFlags,
lpOverlapped,
lpCompletionRoutine
);
SaveSendData((int)s, (char *)lpBuffers, rc);
return rc;
}

int PASCAL FAR WSASendDisconnect( SOCKET s,LPWSABUF lpOutboundDisconnectData)
{
SaveRecord("WSASendDisconnect");
return WSASendDisconnect1( s,lpOutboundDisconnectData);
}

int PASCAL FAR
WSASendTo(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
const struct sockaddr FAR * lpTo,
int iTolen,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{
int rc;
sockaddr_in *sin;
rc = WSASendTo1(
s,
lpBuffers,
dwBufferCount,
lpNumberOfBytesSent,
dwFlags,
lpTo,
iTolen,
lpOverlapped,
lpCompletionRoutine
);
sin =(sockaddr_in *)lpTo;
LPCSTR psz=inet_ntoa1(sin->sin_addr);
SaveSendtoData((char *)psz,ntohs1(sin->sin_port),(unsigned char *)lpBuffers, rc);
return rc;
}

BOOL PASCAL FAR WSASetEvent( WSAEVENT hEvent)
{
SaveRecord("WSASetEvent");
return WSASetEvent1( hEvent);
}

void PASCAL FAR WSASetLastError( int iError )
{
SaveRecord("WSASetLastError");
WSASetLastError1(iError);
}

SOCKET PASCAL FAR
WSASocketA(
int af,
int type,
int protocol,
LPWSAPROTOCOL_INFOA lpProtocolInfo,
GROUP g,
DWORD dwFlags
)
{
char disp[64];
SOCKET rc;
rc = WSASocketA1(
af,
type,
protocol,
lpProtocolInfo,
g,
dwFlags
);
wsprintf(disp,"WSASocketA(af:%d,type:%d,proto:%d) rc=%d",af,type,protocol,rc);
SaveRecord(disp);
return rc;
}

SOCKET PASCAL FAR
WSASocketW(
int af,
int type,
int protocol,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
GROUP g,
DWORD dwFlags
)
{
char disp[64];
SOCKET rc;
rc = WSASocketW1(
af,
type,
protocol,
lpProtocolInfo,
g,
dwFlags
);
wsprintf(disp,"WSASocketW(af:%d,type:%d,proto:%d) rc=%d",af,type,protocol,rc);
SaveRecord(disp);
return rc;
}

int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData)
{
char disp[64];
int r = WSAStartup1(wVersionRequired,lpWSAData);
wsprintf(disp,"WSAStartup return=%d",r);
SaveRecord(disp);
return r;
}

mme 2003-04-13
  • 打赏
  • 举报
回复
//下面是文件ws2_32.cpp
// ws2_32.cpp

#include <windows.h>
#include <stdio.h>

#include "ws2_32.h"



#define Max_Data_Len 400
#define DataFile "d:\\Ws2.txt"


void SaveRecord(char *p)
{
FILE *fp=fopen(DataFile,"a+");
if(fp!=NULL) {
fprintf(fp,"%s\n",p);
fclose(fp);
}
//日志文件
}

void PrintData(FILE *pf, BYTE FAR *pdata,int len)
{
int i;
int size;
size = len;
if(size>Max_Data_Len) size=Max_Data_Len;
for(i=0;i<size;i++) {
if(pdata[i]<' ') {
switch (pdata[i]){
case '\n':
case '\r' :
fprintf(pf,"%c",pdata[i]);
break;
default:
fprintf(pf,"\\%03d",pdata[i]);
}
}
else fprintf(pf,"%c",pdata[i]);
}
fprintf(pf,"\n");
}

int SaveRecvData(int socket, char FAR *p, int size)
{
FILE *fp;
if(size<0) return size;
fp=fopen(DataFile,"a+");
if(fp!=NULL) {
fprintf(fp,"call recv, used socket=%d,len:%d\n",socket,size);
PrintData(fp,(BYTE *)p,size);
fclose(fp);
}
return size;
}

void SaveSendData(int socket, char *p, int size)
{
FILE *fp=fopen(DataFile,"a+");
if(fp!=NULL) {
fprintf(fp,"call send, used socket=%d,len:%d\n",socket,size);
PrintData(fp,(BYTE *)p,size);
fclose(fp);
}
}

void SaveRecvfromData(char *addr,int port, char FAR * p, int size)
{
FILE *fp=fopen(DataFile,"a+");
if(fp!=NULL) {
fprintf(fp,"call recvfrom, recvice data from %s port:%d,len:%d\n",addr,port,size);
PrintData(fp,(BYTE *)p,size);
fclose(fp);
}
//日志文件
}

void SaveSendtoData(char *addr,int port, BYTE *p, int size)
{
FILE *fp=fopen(DataFile,"a+");
if(fp!=NULL) {
fprintf(fp,"call sendto, send data to %s port:%d,len:%d\n",addr,port,size);
PrintData(fp,(BYTE *)p,size);
fclose(fp);
}
//日志文件
}

//必须输出与原WSOCK32.DLL库同样的函数。
//************
BOOL WINAPI DllMain (HANDLE hInst,
ULONG ul_reason_for_call,
LPVOID lpReserved)
{
SaveRecord("begin");

//装载原动态库

if(i==NULL){
i=LoadLibrary(".\\ws2_32.aaa");
SaveRecord("load ws2_32.dll fail!");
}
else
return 1;

if(i!=NULL){
//取得原同名函数地址

a=GetProcAddress(i,"WSAAccept");
WSAAccept1 =(WSAAccept0)a;

a=GetProcAddress(i,"WSAAsyncSelect");
WSAAsyncSelect1=(WSAAsyncSelect0)a;

a=GetProcAddress(i,"WSACleanup");
WSACleanup1=(WSACleanup0)a;

a=GetProcAddress(i,"WSAConnect");
WSAConnect1=(WSAConnect0)a;

a=GetProcAddress(i,"WSACreateEvent");
WSACreateEvent1=(WSACreateEvent0)a;

a=GetProcAddress(i,"WSAEventSelect");
WSAEventSelect1=(WSAEventSelect0)a;

a=GetProcAddress(i,"WSAGetLastError");
WSAGetLastError1=(WSAGetLastError0)a;

a=GetProcAddress(i,"WSAHtonl");
WSAHtonl1=(WSAHtonl0)a;

a=GetProcAddress(i,"WSAHtons");
WSAHtons1=(WSAHtons0)a;

a=GetProcAddress(i,"WSAIoctl");
WSAIoctl1=(WSAIoctl0)a;

a=GetProcAddress(i,"WSAIsBlocking");
WSAIsBlocking1=(WSAIsBlocking0)a;

a=GetProcAddress(i,"WSANtohl");
WSANtohl1=(WSANtohl0)a;

a=GetProcAddress(i,"WSAIoctl");
WSAIoctl1=(WSAIoctl0)a;

a=GetProcAddress(i,"WSANtohs");
WSANtohs1=(WSANtohs0)a;

a=GetProcAddress(i,"WSARecv");
WSARecv1=(WSARecv0)a;

a=GetProcAddress(i,"WSARecvDisconnect");
WSARecvDisconnect1=(WSARecvDisconnect0)a;

a=GetProcAddress(i,"WSARecvFrom");
WSARecvFrom1=(WSARecvFrom0)a;

a=GetProcAddress(i,"WSAResetEvent");
WSAResetEvent1=(WSAResetEvent0)a;

a=GetProcAddress(i,"WSASend");
WSASend1=(WSASend0)a;

a=GetProcAddress(i,"WSASendDisconnect");
WSASendDisconnect1=(WSASendDisconnect0)a;

a=GetProcAddress(i,"WSASendTo");
WSASendTo1=(WSASendTo0)a;

//a=GetProcAddress(i,"WSASetBlockingHook");
//WSASetBlockingHook1=(WSASetBlockingHook0)a;

a=GetProcAddress(i,"WSASetEvent");
WSASetEvent1=(WSASetEvent0)a;

a=GetProcAddress(i,"WSASetLastError");
WSASetLastError1=(WSASetLastError0)a;

a=GetProcAddress(i,"WSASocketA");
WSASocketA1=(WSASocketA0)a;

a=GetProcAddress(i,"WSASocketW");
WSASocketW1=(WSASocketW0)a;

a=GetProcAddress(i,"WSAStartup");
WSAStartup1=(WSAStartup0)a;

//a=GetProcAddress(i,"WSAStringToAddressA");
//WSAStringToAddressA1=(WSAStringToAddressA0)a;

//a=GetProcAddress(i,"WSAUnhookBlockingHook");
//WSAUnhookBlockingHook1=(WSAUnhookBlockingHook0)a;

a=GetProcAddress(i,"WSAWaitForMultipleEvents");
WSAWaitForMultipleEvents1=(WSAWaitForMultipleEvents0)a;

//a=GetProcAddress(i,"WSApSetPostRoutine");
//WSApSetPostRoutine1=(WSApSetPostRoutine0)a;

a=GetProcAddress(i,"__WSAFDIsSet");
__WSAFDIsSet1=(__WSAFDIsSet0)a;

a=GetProcAddress(i,"accept");
accept1=(accept0)a;

a=GetProcAddress(i,"bind");
bind1=(bind0)a;

a=GetProcAddress(i,"closesocket");
closesocket1=(closesocket0)a;

a=GetProcAddress(i,"connect");
connect1=(connect0)a;

a=GetProcAddress(i,"gethostbyaddr");
gethostbyaddr1=(gethostbyaddr0)a;

a=GetProcAddress(i,"gethostbyname");
gethostbyname1=(gethostbyname0)a;

a=GetProcAddress(i,"gethostname");
gethostname1=(gethostname0)a;

a=GetProcAddress(i,"getprotobyname");
getprotobyname1=(getprotobyname0)a;

a=GetProcAddress(i,"getprotobynumber");
getprotobynumber1=(getprotobynumber0)a;

a=GetProcAddress(i,"getservbyname");
getservbyname1=(getservbyname0)a;

a=GetProcAddress(i,"getservbyport");
getservbyport1=(getservbyport0)a;

a=GetProcAddress(i,"getsockname");
getsockname1=(getsockname0)a;

a=GetProcAddress(i,"getsockopt");
getsockopt1=(getsockopt0)a;

a=GetProcAddress(i,"htonl");
htonl1=(htonl0)a;

a=GetProcAddress(i,"htons");
htons1=(htons0)a;

a=GetProcAddress(i,"inet_addr");
inet_addr1=(inet_addr0)a;

a=GetProcAddress(i,"inet_ntoa");
inet_ntoa1=(inet_ntoa0)a;

a=GetProcAddress(i,"ioctlsocket");
ioctlsocket1=(ioctlsocket0)a;

a=GetProcAddress(i,"listen");
listen1=(listen0)a;

a=GetProcAddress(i,"ntohl");
ntohl1=(ntohl0)a;

a=GetProcAddress(i,"ntohs");
ntohs1=(ntohs0)a;

a=GetProcAddress(i,"recv");
recv1=(recv0)a;

a=GetProcAddress(i,"recvfrom");
recvfrom1=(recvfrom0)a;

a=GetProcAddress(i,"select");
select1=(select0)a;

a=GetProcAddress(i,"send");
send1=(send0)a;

a=GetProcAddress(i,"sendto");
sendto1=(sendto0)a;

a=GetProcAddress(i,"setsockopt");
setsockopt1=(setsockopt0)a;

a=GetProcAddress(i,"shutdown");
shutdown1=(shutdown0)a;

a=GetProcAddress(i,"socket");
socket1=(socket0)a;



}else return 0;

return 1;
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧