注册
登录
会员
标签
百科
帮助
网络分析专家论坛 netexpert
»
网络分析开发
» libpcap的pcap_next()函数问题?
Netexpert FAQ
网络分析专家学习建议入口
@netexpert成员申请指南
网络分析时代
netexpert积分规则的说明
Netis招贤纳士(2008年11月22日更新)
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
libpcap的pcap_next()函数问题?
lyd
劳苦功高
精华
0
积分
142
发短消息
加为好友
当前离线
1
#
大
中
小
发表于 2007-6-8 18:17
只看该作者
libpcap的pcap_next()函数问题?
在网上看到一篇介绍libpcap开发的文章,对libpcap的开发过程中说:
进入(死)循环,反复获取数据包
for( ; ; )
while((ptr = (char *)(pcap_next(p,&hdr)))==NULL);
分析、处理包;
这里有些疑问:
1、pcap_next()是一次从网络上获取一个数据包吧??
2、如果是这样,那么在“分析、处理”的时候,又有数据包通过,那么是不是丢掉很多包??
[
本帖最后由 lyd 于 2007-6-8 18:23 编辑
]
除了努力,我们别无选择!
UID
52302
帖子
72
积分
142
威望
99
阅读权限
40
在线时间
23 小时
注册时间
2007-2-7
最后登录
2008-3-12
查看详细资料
TOP
lyd
劳苦功高
精华
0
积分
142
发短消息
加为好友
当前离线
2
#
大
中
小
发表于 2007-6-13 11:10
只看该作者
是不是问题太简单,没有人对这个问题感兴趣?
我觉得对获取的包进行分析之前,应该要进行缓冲.这个工作是由libpcap自己做了,还是由用户做.
如果由用户做,那么在什么地方设置缓冲区的大小??
除了努力,我们别无选择!
UID
52302
帖子
72
积分
142
威望
99
阅读权限
40
在线时间
23 小时
注册时间
2007-2-7
最后登录
2008-3-12
查看详细资料
TOP
scz
版主
精华
7
积分
3538
发短消息
加为好友
当前离线
3
#
大
中
小
发表于 2007-6-13 17:01
只看该作者
自己缓冲,搞收包队列,先进先出。但仍不足以解决问题。这是这类程序的常见问题。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣
UID
522
帖子
648
积分
3538
威望
2879
阅读权限
150
在线时间
351 小时
注册时间
2005-3-14
最后登录
2008-11-22
查看个人网站
查看详细资料
TOP
lyd
劳苦功高
精华
0
积分
142
发短消息
加为好友
当前离线
4
#
大
中
小
发表于 2007-6-13 18:28
只看该作者
不知其他基于libpcap的软件,如:tcpdump,winpcap
是怎么做的.不知版主有没有一些这方面的资料
除了努力,我们别无选择!
UID
52302
帖子
72
积分
142
威望
99
阅读权限
40
在线时间
23 小时
注册时间
2007-2-7
最后登录
2008-3-12
查看详细资料
TOP
scz
版主
精华
7
积分
3538
发短消息
加为好友
当前离线
5
#
大
中
小
发表于 2007-6-13 21:47
只看该作者
我以前用sock_packet写过linux下的sniffer,我是双线程,一个在嗅探,另一个在协议解码干点坏事,当时嗅探的那个线程在FIFO,搞了大缓冲。
你问的都是开源软件,看源代码就是了,不必在这问这个问题的。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣
UID
522
帖子
648
积分
3538
威望
2879
阅读权限
150
在线时间
351 小时
注册时间
2005-3-14
最后登录
2008-11-22
查看个人网站
查看详细资料
TOP
lyd
劳苦功高
精华
0
积分
142
发短消息
加为好友
当前离线
6
#
大
中
小
发表于 2007-6-14 14:56
只看该作者
先谢谢版主!
我现在也正是要做你的这个工作,也考虑到用双线程,一个用于获取(p1),一个用于分析(p2)。
我的想法:
p1把通过pcap_next() 获取的数据组成一个链表L1;
p2不停的读取L1进行分析。 这样是不是有点类似于书上说的producter_consumer
由于对多线程不是很了解(前面处理实现起来还有很多问题),这几天正在学习,还望版主不吝赐教 !
除了努力,我们别无选择!
UID
52302
帖子
72
积分
142
威望
99
阅读权限
40
在线时间
23 小时
注册时间
2007-2-7
最后登录
2008-3-12
查看详细资料
TOP
lyd
劳苦功高
精华
0
积分
142
发短消息
加为好友
当前离线
7
#
大
中
小
发表于 2007-6-21 18:45
只看该作者
我现在用双线程进行处理,一个获取,一个分析。
我定义了一个结构体,想构造出一个循环链表
struct pcap_buf{
u_char * buf[200];
int head,tail;
};
但遇到了问题:
获取时,想把通过pcap_next()获取包的指针存储到链表的buf[]中,但是这个函数返回的值是 const u_char *,每次获取的地址都是相同,这样数组里的地址值都是相同的。当然是我没有弄清楚里面的细节造成的。
也有人在介绍pcap_loop()时说:这个函数参数u_char指针,它包含了被pcap_loop()嗅探到的所有包,这个u_char就是所有包的串联版本。
请仁兄指教
除了努力,我们别无选择!
UID
52302
帖子
72
积分
142
威望
99
阅读权限
40
在线时间
23 小时
注册时间
2007-2-7
最后登录
2008-3-12
查看详细资料
TOP
lyd
劳苦功高
精华
0
积分
142
发短消息
加为好友
当前离线
8
#
大
中
小
发表于 2007-6-22 10:00
只看该作者
scz版主在吗?
这个问题搞不定特郁闷,请帮忙!!!
除了努力,我们别无选择!
UID
52302
帖子
72
积分
142
威望
99
阅读权限
40
在线时间
23 小时
注册时间
2007-2-7
最后登录
2008-3-12
查看详细资料
TOP
scz
版主
精华
7
积分
3538
发短消息
加为好友
当前离线
9
#
大
中
小
发表于 2007-6-22 15:15
只看该作者
你得复制这些数据到自己的缓冲区中,而不是用原来pcap的缓冲区。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣
UID
522
帖子
648
积分
3538
威望
2879
阅读权限
150
在线时间
351 小时
注册时间
2005-3-14
最后登录
2008-11-22
查看个人网站
查看详细资料
TOP
lyd
劳苦功高
精华
0
积分
142
发短消息
加为好友
当前离线
10
#
大
中
小
发表于 2007-6-22 18:46
只看该作者
谢谢你不吝赐教!!!
const u_char *packet;
packet = pcap_next(handle,&header);
我是不是可以这样理解:
1、pcap_next每次获取一个包,如果没有处理,那下一个包就会覆盖前一个包;
2、包作为字符串来对待,头指针存在packet中;
3、如果我现在要复制这些到自己的缓冲区,那么是不是就是复制以packet 为头指针的,长度为header.len的字符串???
除了努力,我们别无选择!
UID
52302
帖子
72
积分
142
威望
99
阅读权限
40
在线时间
23 小时
注册时间
2007-2-7
最后登录
2008-3-12
查看详细资料
TOP
scz
版主
精华
7
积分
3538
发短消息
加为好友
当前离线
11
#
大
中
小
发表于 2007-6-24 11:58
只看该作者
我最后一次用pcap,是2000年,你问的东西对现在的我来说,太细了,我要回你,势必要重新去熟悉它,抱歉,你再问问别人吧。
第一个理解差不多。第二个理解不太对,那是字节流,哪来什么字符串啊。至于字节流由哪个指针(那个成员字段)指向,我现在记不清,都是源码,你直接看看文档或源码都一目了然的。第三个其实跟第二个是一个问题,最后,你得把自己的缓冲区弄成链表上的节点。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣
UID
522
帖子
648
积分
3538
威望
2879
阅读权限
150
在线时间
351 小时
注册时间
2005-3-14
最后登录
2008-11-22
查看个人网站
查看详细资料
TOP
lyd
劳苦功高
精华
0
积分
142
发短消息
加为好友
当前离线
12
#
大
中
小
发表于 2007-6-24 14:55
只看该作者
先谢谢了!
我试了一下,基本可以啦!!!
[
本帖最后由 lyd 于 2007-6-25 12:28 编辑
]
除了努力,我们别无选择!
UID
52302
帖子
72
积分
142
威望
99
阅读权限
40
在线时间
23 小时
注册时间
2007-2-7
最后登录
2008-3-12
查看详细资料
TOP
pctj
初来乍到
精华
0
积分
28
发短消息
加为好友
当前离线
13
#
大
中
小
发表于 2007-7-18 10:49
只看该作者
关键在于每次移动的字节流的长度是如何确定的
SCZ的回答还是比较清晰了
不过看来我们落伍了
斑竹2000年搞得
我才开始认识 唉~~~
UID
10807
帖子
9
积分
28
威望
10
阅读权限
20
在线时间
16 小时
注册时间
2006-1-19
最后登录
2008-8-15
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
版块跳转
网络分析专家论坛
网络分析
BoneLight专版
网络分析开发
安全分析
病毒、蠕虫分析
运营商网络分析
新手专区
产品、技术聚焦
Wireshark/Ethereal专题
Cisco 技术专题
Solarwinds专题
Sniffer Pro专题
TAP专题
OmniPeek专题
资源区
综合资源共享
Trace File专版
培训与认证
工作生活区
网络人生
面试招聘专题
站务管理区
站务管理
@netexpert.cn 成员个人记录区
网络分析与生活 - Vader闲话版
jingshne个人视角