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);