问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于pcap_dispatch()的使用。为什么每次捕包的时候还没等超时结束,pcap...

发布网友 发布时间:2024-02-25 13:19

我来回答

1个回答

热心网友 时间:2024-10-28 02:23

代码里面的user和参数的filename没有看到你怎么定义的。
用pcap_loop或者pcap_next相关的函数试试看。
另外,你根据帮助文档看看,尤其是检测一下返回值。这系列相关的函数和平台版本等都有关系的。
NAME

pcap_loop, pcap_dispatch - process packets from a live capture or save-
file

SYNOPSIS

#include <pcap/pcap.h>

typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h,
const u_char *bytes);

int pcap_loop(pcap_t *p, int cnt,
pcap_handler callback, u_char *user);
int pcap_dispatch(pcap_t *p, int cnt,
pcap_handler callback, u_char *user);

DESCRIPTION

pcap_loop() processes packets from a live capture or ``savefile'' until
cnt packets are processed, the end of the ``savefile'' is reached when
reading from a ``savefile'', pcap_breakloop() is called, or an error
occurs. It does not return when live read timeouts occur. A value of
-1 or 0 for cnt is equivalent to infinity, so that packets are pro-
cessed until another ending condition occurs.

pcap_dispatch() processes packets from a live capture or ``savefile''
until cnt packets are processed, the end of the current bufferful of
packets is reached when doing a live capture, the end of the ``save-
file'' is reached when reading from a ``savefile'', pcap_breakloop() is
called, or an error occurs. Thus, when doing a live capture, cnt is
the maximum number of packets to process before returning, but is not a
minimum number; when reading a live capture, only one bufferful of
packets is read at a time, so fewer than cnt packets may be processed.
A value of -1 or 0 for cnt causes all the packets received in one
buffer to be processed when reading a live capture, and causes all the
packets in the file to be processed when reading a ``savefile''.

(In older versions of libpcap, the behavior when cnt was 0 was unde-
fined; different platforms and devices behaved differently, so code
that must work with older versions of libpcap should use -1, nor 0, as
the value of cnt.)

callback specifies a routine to be called with three arguments: a
u_char pointer which is passed in the user argument to pcap_loop() or
pcap_dispatch(), a const struct pcap_pkthdr pointer pointing to the
packet time stamp and lengths, and a const u_char pointer to the first
caplen (as given in the struct pcap_pkthdr a pointer to which is passed
to the callback routine) bytes of data from the packet.

RETURN VALUE

pcap_loop() returns 0 if cnt is exhausted, -1 if an error occurs, or -2
if the loop terminated due to a call to pcap_breakloop() before any
packets were processed. It does not return when live read timeouts
occur; instead, it attempts to read more packets.

pcap_dispatch() returns the number of packets processed on success;
this can be 0 if no packets were read from a live capture (if, for
example, they were discarded because they didn't pass the packet fil-
ter, or if, on platforms that support a read timeout that starts before
any packets arrive, the timeout expires before any packets arrive, or
if the file descriptor for the capture device is in non-blocking mode
and no packets were available to be read) or if no more packets are
available in a ``savefile.'' It returns -1 if an error occurs or -2 if
the loop terminated due to a call to pcap_breakloop() before any pack-
ets were processed. If your application uses pcap_breakloop(), make
sure that you explicitly check for -1 and -2, rather than just checking
for a return value < 0.

If -1 is returned, pcap_geterr() or pcap_perror() may be called with p
as an argument to fetch or display the error text.

热心网友 时间:2024-10-28 02:26

代码里面的user和参数的filename没有看到你怎么定义的。
用pcap_loop或者pcap_next相关的函数试试看。
另外,你根据帮助文档看看,尤其是检测一下返回值。这系列相关的函数和平台版本等都有关系的。
NAME

pcap_loop, pcap_dispatch - process packets from a live capture or save-
file

SYNOPSIS

#include <pcap/pcap.h>

typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h,
const u_char *bytes);

int pcap_loop(pcap_t *p, int cnt,
pcap_handler callback, u_char *user);
int pcap_dispatch(pcap_t *p, int cnt,
pcap_handler callback, u_char *user);

DESCRIPTION

pcap_loop() processes packets from a live capture or ``savefile'' until
cnt packets are processed, the end of the ``savefile'' is reached when
reading from a ``savefile'', pcap_breakloop() is called, or an error
occurs. It does not return when live read timeouts occur. A value of
-1 or 0 for cnt is equivalent to infinity, so that packets are pro-
cessed until another ending condition occurs.

pcap_dispatch() processes packets from a live capture or ``savefile''
until cnt packets are processed, the end of the current bufferful of
packets is reached when doing a live capture, the end of the ``save-
file'' is reached when reading from a ``savefile'', pcap_breakloop() is
called, or an error occurs. Thus, when doing a live capture, cnt is
the maximum number of packets to process before returning, but is not a
minimum number; when reading a live capture, only one bufferful of
packets is read at a time, so fewer than cnt packets may be processed.
A value of -1 or 0 for cnt causes all the packets received in one
buffer to be processed when reading a live capture, and causes all the
packets in the file to be processed when reading a ``savefile''.

(In older versions of libpcap, the behavior when cnt was 0 was unde-
fined; different platforms and devices behaved differently, so code
that must work with older versions of libpcap should use -1, nor 0, as
the value of cnt.)

callback specifies a routine to be called with three arguments: a
u_char pointer which is passed in the user argument to pcap_loop() or
pcap_dispatch(), a const struct pcap_pkthdr pointer pointing to the
packet time stamp and lengths, and a const u_char pointer to the first
caplen (as given in the struct pcap_pkthdr a pointer to which is passed
to the callback routine) bytes of data from the packet.

RETURN VALUE

pcap_loop() returns 0 if cnt is exhausted, -1 if an error occurs, or -2
if the loop terminated due to a call to pcap_breakloop() before any
packets were processed. It does not return when live read timeouts
occur; instead, it attempts to read more packets.

pcap_dispatch() returns the number of packets processed on success;
this can be 0 if no packets were read from a live capture (if, for
example, they were discarded because they didn't pass the packet fil-
ter, or if, on platforms that support a read timeout that starts before
any packets arrive, the timeout expires before any packets arrive, or
if the file descriptor for the capture device is in non-blocking mode
and no packets were available to be read) or if no more packets are
available in a ``savefile.'' It returns -1 if an error occurs or -2 if
the loop terminated due to a call to pcap_breakloop() before any pack-
ets were processed. If your application uses pcap_breakloop(), make
sure that you explicitly check for -1 and -2, rather than just checking
for a return value < 0.

If -1 is returned, pcap_geterr() or pcap_perror() may be called with p
as an argument to fetch or display the error text.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产车间员工岗位职责及权限、任职要求分别是什么 车间普工岗位职责(集合6篇) "上海"的地名是谁起的,什么意思? 老公的爸妈是表亲,我爸妈也是表兄妹,孩子会怎么样吗? 爸妈是近亲结婚他们是表兄妹 我生孩子会有问题吗? 爸妈是亲表兄妹结婚对这代没事。。不知道下一代有问题没。。。_百度... 鉴证实录 法证女朋友怎么死的0 沈阳御通实业有限公司怎么样? 玉环御通广告有限公司御通服务 问御石通效果怎么样啊,治疗结石的 一年内怎么改第二次 求VC下WINPCAP抓包的代码 耳机见水五分钟还能用,对耳朵有没有伤害,或者说有没有可能炸掉_百度知 ... 贵阳中海映山湖产权年限多少年? 长安睿骋CC儿童锁在哪里睿骋CC安全座椅接口类型 如何快速清除华为mate8摄像头上的雾气? 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... ...Flash Player Update Service服务启动后又停止了 怎么让它开启啊_百... 未满一年怎么改第二次 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 修改没到一年怎么改? 如何一年内强制二次修改? 王者荣耀为什么我一直打韩信,每局都被打得很惨,后面越来越惨 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 未满一年怎么改第二次 哪一部漫画有一个叫猫太君 一年内第二次强制修改 日本大约十年前有一部动漫是真人版的,是一只橙色的猫而且爱吃拉面,是什 ... 您的手机号在最近24小时内绑定过三个,已达到限制,...24小时后... ipad a1474是什么型号? 长安睿骋CC钥匙怎么解锁的? 如何一年内强制二次修改 一年内第二次强制修改 中国民谣乐器有哪些 谁有《睡眠障碍国际分类第3版》PDF这本书,百度网盘分享一下呗。谢谢... 如何一年内强制二次修改? 您的手机号在最近24小时内绑定过三个,已达到限制,...24小时后... 改过一次,就只能等一年后再进行第二次修改了吧? 如何一年内强制二次修改? 请问我的改过一次,还能再次修改吗? 孩子为什么会出现感统失调? 用谁字怎么组词 孩子为什么会存在感统失调的现象? 一年修改一次是什么意思,就是假如说2020年修改过一次2021年是不... 儿童感统失调是什么原因? 一年可以修改两次吗? 户口本户主是谁宅基地就是谁的吗 最有争议的五大FMVP都是谁你知道吗? 一年只能改一次怎么改第二次? 用谁组词组成谁知