8.1 使用WinPcap发送数据包

针对不同的应用情况,WinPcap提供了下列四种方式来把原始数据包发送到网络中。

❑每次发送一个数据包一次。

❑每次发送一个数据包,但在内核中重复发送多于一次,次数预先设定。

❑每次发送一个发送队列(发送队列是一个容器,它能容纳不同数量的数据包),并根据每个数据包的时间戳严格按顺序发送各数据包(称为同步方式)。

❑每次发送一个发送队列,但不根据每个数据包的时间戳发送各数据包,而是尽可能快速地发送各数据包(称为异步方式)。

用户可根据实际需要来选择合适的发送方式,具体的选择方法及有关各发送方式的性能比较可参见第13章。

8.1.1 wpcap.dll库导出的相应函数

WinPcap为了使用户能够顺利完成数据包的发送任务,在库wpcap.dll中提供了下列函数,用户可以很方便地使用它们。

pcap_sendpacket函数发送单个原始数据包一次或多次,其原型如下:


int pcap_sendpacket(pcap_tp,u_charbuf,int size);


pcap_send_queue函数分配一个发送队列,其原型如下:


pcap_send_queue*pcap_sendqueue_alloc(u_int memsize);


pcap_sendqueue_queue函数把一个原始数据包添加到queue参数所指定的发送队列的尾部,其原型如下:


int pcap_sendqueue_queue(pcap_send_queue*queue,

const struct pcap_pkthdr*pkt_header,

const u_char*pkt_data);


pcap_sendqueue_transmit函数发送一个数据包队列到网络,其原型如下:


u_int pcap_sendqueue_transmit(pcap_t*p,

pcap_send_queue*queue,int sync);


pcap_sendqueue_destroy函数释放与一个发送队列相关的所有资源其原型如下:


void pcap_sendqueue_destroy(pcap_send_queue*queue);