荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (kernel), 信区: Linux
标  题: 和我一起学libpcap(2.4)(转寄)
发信站: 荔园晨风BBS站 (Sat Mar  2 22:39:33 2002), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: doggy (不能回家好无聊), 信区: Linux
标  题: 和我一起学libpcap(2.4)(转寄)
发信站: BBS 水木清华站 (Mon Feb  4 07:10:16 2002)

本文版权所有:doggy(chaujy@x263.net) 欢迎转载

2.4 参数初步研究

前面使用各函数时,并没有具体说明每个函数的意义,现在来探讨一下

pcap_t * pcap_open_live(char *device, int snaplen, int promisc,
                        int to_ms, char *ebuf)
device指定设备,snaplen指定最长抓多少字节,ebuf出错信息,前面都说过
promisc指出是否设置为混杂模式(不懂?我也不懂,整个网都听还有什么安全性可言)
to_ms设置超时时间,单位milliseconds

int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
cnt为要抓的包数,pcap_loop在正常时抓cnt个包后返回,异常时返回值<0
user是要传入callback()的数据,例如我们把上面的程序修改几行
//pcap_loop(pd, 10, printer, NULL);
pcap_loop(pd, 10, printer, (u_char*)pd);
再在printer()内加
        pcap_stat stat;
        pcap_stats((pcap_t*)user, &stat);
        printf("recv %d, drop %d.\n", stat.ps_recv, stat.ps_drop);
再编译运行后输出为
166.111.168.0:255.255.252.0
10Mb以太网
recv 1, drop 0.
recv 2, drop 0.
recv 3, drop 0.
recv 4, drop 0.
recv 5, drop 0.
recv 6, drop 0.
recv 7, drop 0.
recv 8, drop 0.
recv 9, drop 0.
recv 10, drop 0.
recv 10, drop 0.

int pcap_compile(pcap_t *p, struct bpf_program *program,
             char *buf, int optimize, bpf_u_int32 mask)
该函数用于解析过滤规则串buf,填写bpf_program结构.
optimize为1表示对过滤规则进行优化处理
netmask指定子网掩码
buf的格式比较复杂

int pcap_setfilter(pcap_t *handle, struct bpf_program *filter)
把pcap_compile()构造的filter设置到handle上

今天到这里吧,改天有时间再继续
大家早上好,我晚安 :,)


--
我宁愿尝试两个人的磨合
也不要继续一个人的寂寞


※ 修改:·doggy 於 Feb  4 07:12:49 修改本文·[FROM:  166.111.169.39]
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.169.39]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店