我爱Aspx >> VC.Net >> 简单分析用SPI实现防火墙return 1;
}
然后我们实现自己的WSPSend
int WSPSend (
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
/*++
在这里我们用getsockname等函数和第一个参数可以得到这个套接字的端口和IP这些东西,还有buffer这些东西都可以在这里处理,实现IP过滤包过滤都可以实现,然后再调用下一层服务提供者的相应函数并返回
--*/
return SystemProc.lpWSPSend(s,lpBuffers,dwBufferCount,lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionRoutine,lpThreaId,lpErrno);
}
当然,在具体的实现中没这么简单,对于WINSOCKET 中的复杂的I/O模型和重叠请求中,还要写回调函数等,现在就不讨论这些问题,有兴趣的自己查找资料
还有,用这个也可以实现sniffer功能,分析出比如POP3以及TELNET等明文传输的网络协议中你感兴趣的东西
数据都在LPWSABUF lpBuffers,这个参数里
下面给出这个结构
该知道怎么解析包了吧?
typedef struct __WSABUF {
u_long len;
char FAR *buf;
} WSABUF, FAR * LPWSABUF;
-----------------
待续.....
【我对这篇文章有话说?】
简单分析用SPI实现防火墙[05-21]
WIN32用户界面设计基础之Cursor篇[05-21]
WIN32用户界面设计基础之Cursor篇[05-21]
程序员手记:简析Java RMI 与 .N..[05-21]
智力游戏九连环的算法[05-21]
一个IE浏览器Explorer Bar的例子[05-21]
如何用C++编程获得某台机器的IP地..[05-21]
.NET框架以及在C++中的初步应用[05-21]
汉诺塔移动步数的计算[05-21]
关于Profile的系列文章(二)[05-21]