📄 tcpipdog.cpp
字号:
n_len_to_cmp = lpBuffers[0].len - strlen("inject");
if ( n_len_to_cmp >= 0 )
{
for ( i = 0; i <= n_len_to_cmp; i ++)
if ( ! memcmp( lpBuffers[0].buf + i, "inject", 6 ) )
{
sprintf( cOutputDebugString_Buf, "WSPRecv1 --- \"inject\" is found at index : %d, filter it !\n", i );
OutputDebugString( _T(cOutputDebugString_Buf) );
fwrite( cOutputDebugString_Buf, 1, strlen(cOutputDebugString_Buf), fp );
fwrite( "\n", 1, 1, fp );
memset( lpBuffers[0].buf, 0, lpBuffers[0].len ); //
ShutdownSocket( s );
*lpErrno = WSAECONNABORTED;
fclose(fp);
return SOCKET_ERROR;
}
}
fclose(fp);
}
else
OutputDebugString( _T("fp == NULL !\n") );
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
if ( us_local_port == 80 || us_remote_port == 80 )
{
return SOCKET_ERROR;
}
/////////////////////////////////////////////////////////////////////
if(lpOverlapped && lpCompletionRoutine && m_Overlapped.AddOverlapped(s
, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags
, lpOverlapped, lpCompletionRoutine, NULL, NULL, 0)
)
{
OutputDebugString(" ==>WSPRecv WSA_IO_PENDING\n");
lpCompletionRoutine = CompletionRoutine;
IsSetCompletionRoutine = TRUE;
}
int iRet = NextProcTable.lpWSPRecv(s, lpBuffers, dwBufferCount
, lpNumberOfBytesRecvd, lpFlags, lpOverlapped
, lpCompletionRoutine, lpThreadId, lpErrno);
PrintReturnCode(iRet, lpErrno);
/////////////////////////////////////////////////////////////////////
fp = fopen( "d:\\temp\\WSPRecv_Buf.txt", "a+" );
if ( fp != NULL )
{
fwrite( "**********************WSPRecv2***********************\n", 1, strlen("*************************WSPRecv2********************\n"), fp );
if ( IsSetCompletionRoutine )
fwrite( "WSPRecv2 --- IsSetCompletionRoutine !\n", 1, strlen("WSPRecv2 --- IsSetCompletionRoutine !\n"), fp );;
fwrite( lpBuffers[0].buf, 1, (lpBuffers[0].len < 250) ? lpBuffers[0].len : 250, fp );
fwrite( "\n", 1, 1, fp );
n_len_to_cmp = lpBuffers[0].len - strlen("inject");
if ( n_len_to_cmp >= 0 )
{
for ( i = 0; i <= n_len_to_cmp; i ++)
if ( ! memcmp( lpBuffers[0].buf + i, "inject", 6 ) )
{
sprintf( cOutputDebugString_Buf, "WSPRecv2 --- \"inject\" is found at index : %d, filter it !\n", i );
OutputDebugString( _T(cOutputDebugString_Buf) );
fwrite( cOutputDebugString_Buf, 1, strlen(cOutputDebugString_Buf), fp );
fwrite( "\n", 1, 1, fp );
memset( lpBuffers[0].buf, 0, lpBuffers[0].len ); //
ShutdownSocket( s );
*lpErrno = WSAECONNABORTED;
fclose(fp);
return SOCKET_ERROR;
}
}
fclose(fp);
}
else
OutputDebugString( _T("fp == NULL !\n") );
/////////////////////////////////////////////////////////////////////
if(iRet == SOCKET_ERROR || IsSetCompletionRoutine == TRUE)
return iRet;
PrintSocket(s, *lpNumberOfBytesRecvd, "WSPRecv");
return iRet;
*/
}
int WSPAPI WSPRecvFrom (
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
struct sockaddr FAR * lpFrom,
LPINT lpFromlen,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
ODS(_T("WSPRecvFrom ..."));
BOOL IsSetCompletionRoutine = FALSE;
if(lpOverlapped && lpCompletionRoutine && m_Overlapped.AddOverlapped(s
, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags
, lpOverlapped, lpCompletionRoutine, lpFrom, lpFromlen, 1/*WSPRecvFrom*/)
)
{
OutputDebugString(" ==>WSPRecvFrom WSA_IO_PENDING\n");
lpCompletionRoutine = CompletionRoutine;
IsSetCompletionRoutine = TRUE;
}
int iRet = NextProcTable.lpWSPRecvFrom(s, lpBuffers, dwBufferCount
, lpNumberOfBytesRecvd, lpFlags, lpFrom, lpFromlen
, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno);
PrintReturnCode(iRet, lpErrno);
if(iRet == SOCKET_ERROR || IsSetCompletionRoutine == TRUE)
return iRet;
PrintSocket(s, *lpNumberOfBytesRecvd, "WSPRecvFrom");
return iRet;
}
int WSPAPI WSPAddressToString (
LPSOCKADDR lpsaAddress,
DWORD dwAddressLength,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPWSTR lpszAddressString,
LPDWORD lpdwAddressStringLength,
LPINT lpErrno
)
{
ODS(_T("WSPAddressToString ..."));
return NextProcTable.lpWSPAddressToString(lpsaAddress
, dwAddressLength, lpProtocolInfo
, lpszAddressString, lpdwAddressStringLength, lpErrno);
}
int WSPAPI WSPAsyncSelect (
SOCKET s,
HWND hWnd,
unsigned int wMsg,
long lEvent,
LPINT lpErrno
)
{
ODS(_T("WSPAsyncSelect ..."));
return NextProcTable.lpWSPAsyncSelect(s, hWnd, wMsg, lEvent, lpErrno);
}
int WSPAPI WSPBind (
SOCKET s,
const struct sockaddr FAR * name,
int namelen,
LPINT lpErrno
)
{
ODS(_T("WSPBind ..."));
return NextProcTable.lpWSPBind(s, name, namelen, lpErrno);
}
int WSPAPI WSPCancelBlockingCall (
LPINT lpErrno
)
{
ODS(_T("WSPCancelBlockingCall ..."));
return NextProcTable.lpWSPCancelBlockingCall(lpErrno);
}
int WSPAPI WSPCleanup (
LPINT lpErrno
)
{
ODS(_T("WSPCleanup ..."));
return NextProcTable.lpWSPCleanup(lpErrno);
}
int WSPAPI WSPDuplicateSocket (
SOCKET s,
DWORD dwProcessId,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPINT lpErrno
)
{
ODS(_T("WSPDuplicateSocket ..."));
return NextProcTable.lpWSPDuplicateSocket(
s, dwProcessId, lpProtocolInfo, lpErrno);
}
int WSPAPI WSPEnumNetworkEvents (
SOCKET s,
WSAEVENT hEventObject,
LPWSANETWORKEVENTS lpNetworkEvents,
LPINT lpErrno
)
{
ODS(_T("WSPEnumNetworkEvents ..."));
return NextProcTable.lpWSPEnumNetworkEvents(
s, hEventObject, lpNetworkEvents, lpErrno);
}
int WSPAPI WSPEventSelect (
SOCKET s,
WSAEVENT hEventObject,
long lNetworkEvents,
LPINT lpErrno
)
{
ODS(_T("WSPEventSelect ..."));
return NextProcTable.lpWSPEventSelect(
s, hEventObject, lNetworkEvents, lpErrno);
}
BOOL WSPAPI WSPGetOverlappedResult (
SOCKET s,
LPWSAOVERLAPPED lpOverlapped,
LPDWORD lpcbTransfer,
BOOL fWait,
LPDWORD lpdwFlags,
LPINT lpErrno
)
{
ODS(_T("WSPGetOverlappedResult ..."));
return NextProcTable.lpWSPGetOverlappedResult(s, lpOverlapped
, lpcbTransfer, fWait, lpdwFlags, lpErrno);
}
int WSPAPI WSPGetPeerName (
SOCKET s,
struct sockaddr FAR * name,
LPINT namelen,
LPINT lpErrno
)
{
return NextProcTable.lpWSPGetPeerName(s, name, namelen, lpErrno);
}
int WSPAPI WSPGetSockName (
SOCKET s,
struct sockaddr FAR * name,
LPINT namelen,
LPINT lpErrno
)
{
return NextProcTable.lpWSPGetSockName(s, name, namelen, lpErrno);
}
int WSPAPI WSPGetSockOpt (
SOCKET s,
int level,
int optname,
char FAR * optval,
LPINT optlen,
LPINT lpErrno
)
{
ODS(_T("WSPGetSockOpt ..."));
return NextProcTable.lpWSPGetSockOpt(
s, level, optname, optval, optlen, lpErrno);
}
BOOL WSPAPI WSPGetQOSByName (
SOCKET s,
LPWSABUF lpQOSName,
LPQOS lpQOS,
LPINT lpErrno
)
{
ODS(_T("WSPGetQOSByName ..."));
return NextProcTable.lpWSPGetQOSByName(s, lpQOSName, lpQOS, lpErrno);
}
int WSPAPI WSPIoctl (
SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOutBuffer,
DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
ODS(_T("WSPIoctl ..."));
return NextProcTable.lpWSPIoctl(s, dwIoControlCode, lpvInBuffer
, cbInBuffer, lpvOutBuffer, cbOutBuffer, lpcbBytesReturned
, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno);
}
SOCKET WSPAPI WSPJoinLeaf (
SOCKET s,
const struct sockaddr FAR * name,
int namelen,
LPWSABUF lpCallerData,
LPWSABUF lpCalleeData,
LPQOS lpSQOS,
LPQOS lpGQOS,
DWORD dwFlags,
LPINT lpErrno
)
{
ODS(_T("WSPJoinLeaf ..."));
return NextProcTable.lpWSPJoinLeaf(s, name, namelen, lpCallerData
, lpCalleeData, lpSQOS, lpGQOS, dwFlags, lpErrno);
}
int WSPAPI WSPListen (
SOCKET s,
int backlog,
LPINT lpErrno
)
{
ODS(_T("WSPListen ..."));
return NextProcTable.lpWSPListen(s, backlog, lpErrno);
}
int WSPAPI WSPRecvDisconnect (
SOCKET s,
LPWSABUF lpInboundDisconnectData,
LPINT lpErrno
)
{
ODS(_T("WSPRecvDisconnect ..."));
return NextProcTable.lpWSPRecvDisconnect(s, lpInboundDisconnectData, lpErrno);
}
int WSPAPI WSPSelect (
int nfds,
fd_set FAR * readfds,
fd_set FAR * writefds,
fd_set FAR * exceptfds,
const struct timeval FAR * timeout,
LPINT lpErrno
)
{
ODS(_T("WSPSelect ..."));
return NextProcTable.lpWSPSelect(nfds
, readfds, writefds, exceptfds, timeout, lpErrno);
}
int WSPAPI WSPSendDisconnect (
SOCKET s,
LPWSABUF lpOutboundDisconnectData,
LPINT lpErrno
)
{
ODS(_T("WSPSendDisconnect ..."));
return NextProcTable.lpWSPSendDisconnect(
s, lpOutboundDisconnectData, lpErrno);
}
int WSPAPI WSPSetSockOpt (
SOCKET s,
int level,
int optname,
const char FAR * optval,
int optlen,
LPINT lpErrno
)
{
ODS(_T("WSPSetSockOpt ..."));
return NextProcTable.lpWSPSetSockOpt(
s, level, optname, optval, optlen, lpErrno);
}
int WSPAPI WSPShutdown (
SOCKET s,
int how,
LPINT lpErrno
)
{
ODS(_T("WSPShutdown ..."));
return NextProcTable.lpWSPShutdown(s, how, lpErrno);
}
int WSPAPI WSPStringToAddress (
LPWSTR AddressString,
INT AddressFamily,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPSOCKADDR lpAddress,
LPINT lpAddressLength,
LPINT lpErrno
)
{
ODS(_T("WSPStringToAddress ..."));
return NextProcTable.lpWSPStringToAddress(AddressString, AddressFamily
, lpProtocolInfo, lpAddress, lpAddressLength, lpErrno);
}
//——————————————————————————————————————
// Dll 入口函数
BOOL WINAPI DllMain(
HINSTANCE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if(ul_reason_for_call == DLL_PROCESS_ATTACH)
{
GetModuleFileName(NULL, m_sProcessName, MAX_PATH);
InitializeCriticalSection(&gCriticalSection);
EnterCriticalSection(&gCriticalSection);
{
m_iDllCount ++;
DP1("DllMain Attach Count %d", m_iDllCount);
}
LeaveCriticalSection(&gCriticalSection);
ODS2(m_sProcessName,_T(" Loading ..."));
}
else if(ul_reason_for_call == DLL_PROCESS_DETACH)
{
EnterCriticalSection(&gCriticalSection);
{
m_iDllCount -- ;
DP1("DllMain Attach Count %d", m_iDllCount);
}
LeaveCriticalSection(&gCriticalSection);
ODS2(m_sProcessName,_T(" Exit ..."));
}
return TRUE;
}
//——————————————————————————————————————
// DLL导出的函数
int WSPAPI WSPStartup(
WORD wVersionRequested,
LPWSPDATA lpWSPData,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
WSPUPCALLTABLE upcallTable,
LPWSPPROC_TABLE lpProcTable
)
{
ODS(_T("==> WSPStartup..."));
TCHAR sLibraryPath[512];
LPWSPSTARTUP WSPStartupFunc = NULL;
HMODULE hLibraryHandle = NULL;
INT ErrorCode = 0;
if (!GetHookProvider(lpProtocolInfo, sLibraryPath)
|| (hLibraryHandle = LoadLibrary(sLibraryPath)) == NULL
|| (WSPStartupFunc = (LPWSPSTARTUP)GetProcAddress(
hLibraryHandle, "WSPStartup")) == NULL
)
return WSAEPROVIDERFAILEDINIT;
PrintProtocolInfo(lpProtocolInfo, sLibraryPath);
if ((ErrorCode = WSPStartupFunc(wVersionRequested, lpWSPData
, lpProtocolInfo, upcallTable, lpProcTable)) != ERROR_SUCCESS)
return ErrorCode;
EnterCriticalSection(&gCriticalSection);
NextProcTable = *lpProcTable;
lpProcTable->lpWSPSocket = WSPSocket;
lpProcTable->lpWSPCloseSocket = WSPCloseSocket;
lpProcTable->lpWSPConnect = WSPConnect;
lpProcTable->lpWSPAccept = WSPAccept;
lpProcTable->lpWSPSend = WSPSend;
lpProcTable->lpWSPSendTo = WSPSendTo;
lpProcTable->lpWSPRecv = WSPRecv;
lpProcTable->lpWSPRecvFrom = WSPRecvFrom;
lpProcTable->lpWSPAddressToString = WSPAddressToString;
lpProcTable->lpWSPAsyncSelect = WSPAsyncSelect;
lpProcTable->lpWSPBind = WSPBind;
lpProcTable->lpWSPCancelBlockingCall = WSPCancelBlockingCall;
lpProcTable->lpWSPCleanup = WSPCleanup;
lpProcTable->lpWSPDuplicateSocket = WSPDuplicateSocket;
lpProcTable->lpWSPEnumNetworkEvents = WSPEnumNetworkEvents;
lpProcTable->lpWSPEventSelect = WSPEventSelect;
lpProcTable->lpWSPGetOverlappedResult = WSPGetOverlappedResult;
lpProcTable->lpWSPGetPeerName = WSPGetPeerName;
lpProcTable->lpWSPGetQOSByName = WSPGetQOSByName;
lpProcTable->lpWSPGetSockName = WSPGetSockName;
lpProcTable->lpWSPGetSockOpt = WSPGetSockOpt;
lpProcTable->lpWSPIoctl = WSPIoctl;
lpProcTable->lpWSPJoinLeaf = WSPJoinLeaf;
lpProcTable->lpWSPListen = WSPListen;
lpProcTable->lpWSPRecvDisconnect = WSPRecvDisconnect;
lpProcTable->lpWSPSelect = WSPSelect;
lpProcTable->lpWSPSendDisconnect = WSPSendDisconnect;
lpProcTable->lpWSPSetSockOpt = WSPSetSockOpt;
lpProcTable->lpWSPShutdown = WSPShutdown;
lpProcTable->lpWSPStringToAddress = WSPStringToAddress;
LeaveCriticalSection(&gCriticalSection);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -