下面简要介绍一下其主要函数的功能:

1) BOOLEAN PacketGetAdapterNames(LPSTR pStr,PULONG BufferSize) 返回可以得到的网络适配器列表及描述.

2) LPADAPTER PacketOpetAdapter(LPTSTR AdapterName) 打开一个网络适配器.

3) BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim) 设置捕获数据报的内核级缓冲区大小.

4) BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter) 为接收到的数据报设置硬件过滤规则.一般而言,需要将其设置为 NDIS_PACKET_TYPE_PROMISCUOUS混杂模式),即接收所有流过的数据报文.

5) LPPACKET PacketAllocatePacket(void) 如果运行成功,返回一个_PACKET结构的指针,否则返回NULL.成功返回的结果将会传送到PacketReceivePacket()函数,接收来自驱动的网络数据报.

6) VOID PacketInitPacket(LPPACKET lpPacket, PVOID Buffer, UINT Length) 初始化一个_PACKET结构.

7) BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET lpPacket, BOOLEAN Sync) 发送一个或多个数据报的副本.

8) BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync) 从NPF驱动程序读取网络数据报及统计信息.

9) VOID PacketFreePacket(LPPACKET lpPacket) 释放参数提供的_PACKET结构.

10) VOID PacketCloseAdapter(LPADAPTER lpAdapter) 关闭参数中提供的网络适配器,释放相关的ADAPTER结构.

5 在Windows平台下协议栈发送和接收函数的设计

了解配置双协议栈的问题之前,我们还要清楚:在Windows平台下通过WinPcap可以直接对网络适配器进行操作,从而实现发送和接收数据报文的目的.在使用WinpCap前首先需要进行初始化 操作,其步骤如下:调用PacketGetAdapterNames()获取当前网络适配器的名称,再调用PacketOpenAdapter()函数打 开一个网络适配器,然后还需要调用PacketSetHwFilter()函数设置网络适配器的过滤规则和调用PacketSetBuff()设置捕获数 据报的内核级缓冲区大小.

当协议栈需要发送数据报文时,首先需要调用PacketAllocatePacket()函数为发送数据报文创建一个网络数据报结构,然后调用 PacketInitPacket()函数对该结构进行初始化,将存储待发送数据报文的缓冲区指针和长度填入网络数据报结构,再接下来便是调用 PacketSendPacket()函数将数据报文从指定的网络适配器中发送出去,之后需要调用PacketFreePacket()函数释放掉刚才申 请的网络数据报文结构的内存空间.这样,一个TCP/IP协议栈就能够完成将一个数据报文通过WinPcap操作网络适配器发送到网络上的工作.

嵌入式平台中配置双协议栈的问题


相关内容