Netexpert FAQ 网络分析专家学习建议入口 @netexpert成员申请指南
网络分析时代 netexpert积分规则的说明 Netis招贤纳士(2008年11月22日更新)
发新话题
打印

libpcap的pcap_next()函数问题?

libpcap的pcap_next()函数问题?

在网上看到一篇介绍libpcap开发的文章,对libpcap的开发过程中说:
进入(死)循环,反复获取数据包
for( ; ; )
     while((ptr = (char *)(pcap_next(p,&hdr)))==NULL);
    分析、处理包;

这里有些疑问:
      1、pcap_next()是一次从网络上获取一个数据包吧??
      2、如果是这样,那么在“分析、处理”的时候,又有数据包通过,那么是不是丢掉很多包??

[ 本帖最后由 lyd 于 2007-6-8 18:23 编辑 ]
除了努力,我们别无选择!

TOP

是不是问题太简单,没有人对这个问题感兴趣?
我觉得对获取的包进行分析之前,应该要进行缓冲.这个工作是由libpcap自己做了,还是由用户做.
如果由用户做,那么在什么地方设置缓冲区的大小??
除了努力,我们别无选择!

TOP

自己缓冲,搞收包队列,先进先出。但仍不足以解决问题。这是这类程序的常见问题。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣

TOP

不知其他基于libpcap的软件,如:tcpdump,winpcap
是怎么做的.不知版主有没有一些这方面的资料
除了努力,我们别无选择!

TOP

我以前用sock_packet写过linux下的sniffer,我是双线程,一个在嗅探,另一个在协议解码干点坏事,当时嗅探的那个线程在FIFO,搞了大缓冲。

你问的都是开源软件,看源代码就是了,不必在这问这个问题的。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣

TOP

先谢谢版主!
我现在也正是要做你的这个工作,也考虑到用双线程,一个用于获取(p1),一个用于分析(p2)。
我的想法:
      p1把通过pcap_next() 获取的数据组成一个链表L1;
      p2不停的读取L1进行分析。   这样是不是有点类似于书上说的producter_consumer

由于对多线程不是很了解(前面处理实现起来还有很多问题),这几天正在学习,还望版主不吝赐教 !
除了努力,我们别无选择!

TOP

我现在用双线程进行处理,一个获取,一个分析。
我定义了一个结构体,想构造出一个循环链表
struct pcap_buf{
       u_char * buf[200];
       int head,tail;
};

但遇到了问题:
      获取时,想把通过pcap_next()获取包的指针存储到链表的buf[]中,但是这个函数返回的值是 const u_char *,每次获取的地址都是相同,这样数组里的地址值都是相同的。当然是我没有弄清楚里面的细节造成的。
      也有人在介绍pcap_loop()时说:这个函数参数u_char指针,它包含了被pcap_loop()嗅探到的所有包,这个u_char就是所有包的串联版本。

请仁兄指教
除了努力,我们别无选择!

TOP

scz版主在吗?
这个问题搞不定特郁闷,请帮忙!!!
除了努力,我们别无选择!

TOP

你得复制这些数据到自己的缓冲区中,而不是用原来pcap的缓冲区。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣

TOP

谢谢你不吝赐教!!!
const u_char *packet;
packet = pcap_next(handle,&header);

我是不是可以这样理解:
       1、pcap_next每次获取一个包,如果没有处理,那下一个包就会覆盖前一个包;
       2、包作为字符串来对待,头指针存在packet中;
       3、如果我现在要复制这些到自己的缓冲区,那么是不是就是复制以packet 为头指针的,长度为header.len的字符串???
除了努力,我们别无选择!

TOP

我最后一次用pcap,是2000年,你问的东西对现在的我来说,太细了,我要回你,势必要重新去熟悉它,抱歉,你再问问别人吧。

第一个理解差不多。第二个理解不太对,那是字节流,哪来什么字符串啊。至于字节流由哪个指针(那个成员字段)指向,我现在记不清,都是源码,你直接看看文档或源码都一目了然的。第三个其实跟第二个是一个问题,最后,你得把自己的缓冲区弄成链表上的节点。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣

TOP

先谢谢了!
我试了一下,基本可以啦!!!

[ 本帖最后由 lyd 于 2007-6-25 12:28 编辑 ]
除了努力,我们别无选择!

TOP

关键在于每次移动的字节流的长度是如何确定的
SCZ的回答还是比较清晰了
不过看来我们落伍了
斑竹2000年搞得
我才开始认识   唉~~~

TOP

发新话题
版块跳转