一个网络抓包程序,在使用时需要包括packet32.h。利用Packet API函数直接操作网卡进行抓包、发包。非常实用。
首先了解几个基本的数据结构:
数据结构:_ADAPTER(关于Network Adapter的)
typedef struct _ADAPTER
{
HANDLE hFile; // 一个打开的NPF driver实例的句柄
CHARSymbolicLink[MAX_LINK_NAME_LENGTH]; // 当前打开的网卡的名字
int NumWrites; // 在这块Adapter上,一个数据包被写的次数:
HANDLE ReadEvent; /* 这块Adapter上的read操作的通知事件。它可以被传递给标准Win32函数(如WaitForSingleObject或者WaitForMultipleObjects) ,这 样可以等待到 driver的缓冲区内有数据到来。在同时等待几个事件的GUI程序中,它特别有用。在Windows2000/XP中, 函数PacketSetMinToCopy()可以用来 设置内核缓冲区中激发本事件的最小数据大小:*/
UINT ReadTimeOut; // 设置一个时间,到时候,即使没有捕获任何包,read操作也会被释放,ReadEvent也会被触发:
} ADAPTER, *LPADAPTER;
数据结构:_PACKET(关于Packet的)
typedef struct _PACKET
{
HANDLE hEvent; // 向后兼容用的:
OVERLAPPED OverLapped;