上述程序中使用了著名的开放项目Winpcap(The Packet Capture and Network Monitoring Library for Windows)中的API,项目网址为:http://www.winpcap.org/。Winpcap是UNIX下的libpcap移植到 Windows下的产物,工作于驱动(Driver)层,能以很高的效率进行网络操作。其提供的packet.dll中包含了多个功能强大的函数,我们聊举几例:
LPPACKET PacketAllocatePacket(void);
如果运行成功,返回一个_PACKET结构的指针,否则返回NULL。成功返回的结果将会传送到PacketReceivePacket()函数,接收来自驱动的网络数据报。
LPADAPTER PacketOpetAdapter(LPTSTR AdapterName);
打开一个网络适配器。
VOID PacketCloseAdapter(LPADAPTER lpAdapter);
关闭参数中提供的网络适配器,释放相关的ADAPTER结构。
VOID PacketFreePacket(LPPACKET lpPacket);
释放参数提供的_PACKET结构。
BOOLEAN PacketGetAdapterNames(LPSTR pStr,PULONG BufferSize);
返回可以得到的网络适配器列表及描述。
BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync);
从NPF驱动程序读取网络数据报及统计信息。
数据报编码结构: |bpf_hdr|data|Padding|bpf_hdr|data|Padding| BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET lpPacket, BOOLEAN Sync);
发送一个或多个数据报的副本。
我们用Depends工具打开pakcet.dll,如下图:
目前,网络剪刀手、网络执法官的软件在底层都用到了Winpcap。本节的例程代码中,看不到关于socket的内容,实际上已经在Winpcap中实现了。Winpcap的源代码可以直接在http://www.winpcap.org/下载。
(参考链接: http://dev.yesky.com/197/2672197.shtml)
共4页: 上一页 [1] [2] [3] 4 下一页
|