pcap“U循环函数不是”;“反应性”;。为什么?
为什么调用pcap_loop函数后,我必须等待几秒钟才能捕获第一个数据包pcap“U循环函数不是”;“反应性”;。为什么?,c,macos,unix,libpcap,C,Macos,Unix,Libpcap,为什么调用pcap_loop函数后,我必须等待几秒钟才能捕获第一个数据包 void print_packet(u_char *, const struct pcap_pkthdr *, const u_char *); int main(int argc, char * argv[]) { pcap_t * handle; char dev_name[] = "en0"; char err_buf[PCAP_ERRBUF_SIZE]; handle = pca
void print_packet(u_char *, const struct pcap_pkthdr *, const u_char *);
int main(int argc, char * argv[])
{
pcap_t * handle;
char dev_name[] = "en0";
char err_buf[PCAP_ERRBUF_SIZE];
handle = pcap_open_live(dev_name, 4096, 1, 0, err_buf);
if (handle == NULL) {
fprintf(stderr, "Couldn't open device %s: %s\n" , dev_name , err_buf);
exit(1);
}
pcap_loop(handle, 1, print_packet, NULL);
pcap_close(handle);
exit(0);
}
void print_packet(u_char * args, const struct pcap_pkthdr * hdr, const u_char * buff)
{
/* ... */
}
我通过阅读
pcap\u open\u live
文档发现了问题:
pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf)
[…]to_ms以毫秒为单位指定读取超时。阅读
超时用于安排在看到数据包时,读取不一定立即返回,
但是它需要等待一定的时间来允许更多的数据包到达并读取多个数据包
在一次操作中从操作系统内核。并非所有平台都支持读取超时;在平台上
否则,将忽略读取超时。在支持读取时间的平台上,to_ms的值为零-
out将导致读取永久等待,以允许足够的数据包到达,而不会超时。[……]
.
tcpdump-i eth0
立即开始给我数据包;我假定tcpdump
使用pcap\u loop()
。您能准备一个简短的演示程序来展示延迟吗?感谢您分享解决方案。最近,我在python/pcapy中遇到了类似的延迟问题