WEB开发网
开发学院操作系统windows 2008 深度剖析WinPcap之(九)——数据包的发送过程 阅读

深度剖析WinPcap之(九)——数据包的发送过程

 2009-10-17 00:00:00 来源:WEB开发网   
核心提示:NPF允许把原始数据包发送到网络上,而且针对不同的应用提供了下列四种发送方式:n应用软件每次发送一个数据包一次;n应用软件每次发送一个数据包大于一次,深度剖析WinPcap之(九)——数据包的发送过程,次数预先设定;n应用软件每次发送一个数据包队列,并根据时间戳发送各数据包;n应用软件每次发送一个数据包队列,因为它被网

NPF允许把原始数据包发送到网络上,而且针对不同的应用提供了下列四种发送方式:

n应用软件每次发送一个数据包一次;

n应用软件每次发送一个数据包大于一次,次数预先设定;

n应用软件每次发送一个数据包队列,并根据时间戳发送各数据包;

n应用软件每次发送一个数据包队列,不根据时间戳,而是尽所能得快速发送各数据包;

数据包被发送到网络时,NPF并不对数据包作任何协议封装,因此应用程序必须构建每个数据包的不同协议头。一般情况下应用程序不需要生成FCS,它通常由网络适配器硬件计算,并在发送到网络前自动添加到每个数据包的尾部。

深度剖析WinPcap之(九)——数据包的发送过程(1)

图9-1函数调用关系图

1.1      wpcap.dll导出的相应函数接口

首先,wpcap.dll为了完成数据包发送的任务,提供了下列函数:

int pcap_sendpacket(pcap_t *p,u_char *     buf,int size);
 
pcap_send_queue* pcap_sendqueue_alloc(u_int memsize);
void pcap_sendqueue_destroy(pcap_send_queue *queue);
int pcap_sendqueue_queue(pcap_send_queue *queue,const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);
 
u_int pcap_sendqueue_transmit(pcap_t *p,pcap_send_queue *queue,int sync);

使用 pcap_sendpacket函数发送单个原始数据包一次。其中参数p是用来发送数据包的一个pcap_t类型描述符(可通过pcap_open函数所获得的描述符),参数buf包含所要发送数据包的数据(包含各种协议头),参数size是buf所指缓冲区的大小,也就是所要发送数据包的大小。无需包含MAC CRC,因为它被网络接口的驱动程序计算并附加。该函数如果成功就返回0,否则返回-1。

1 2 3  下一页

Tags:深度 剖析 WinPcap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接