Tinnal 发表于 2014-04-29 08:31

回复 9# siyu_yangyang
估计你的重复贴发太多了,被删了。

知道错误点你还不知道怎么去改,证明你对BPF很不熟悉,那你为什么不用libpcap呢?如果你想追求PF_RING的性能,libpcap也有针对PF_RING的版本呀,想不明白。libpcap的过滤规则是人性化的字符串,而BPF是类汇编的语言,如果你以前没有汇编的编程经验,会觉得他比较别扭。

如果你真坚持用BPF,那请你先把BPF学会再说。
百度一个Linux BPF, 有很多文章,如:
http://blog.csdn.net/maeom/article/details/6092457

我今天百度BPF才发现,你可能是拷贝别人的代码,而不是自己写的,那个出错点是因为别人代码里有某些代码变成笑脸了。如:
http://bbs.chinaunix.net/thread-1972792-1-1.html
大哥,你拷贝也找份完整点的呀!

你这种新手,建议还是用回libpcap吧。别折腾了。
百度一个libpcap吧,例如:
http://blog.csdn.net/htttw/article/details/7521053

如果还不知道过滤规则怎么用,那就先学会用现在的工具tcpdump再说吧。


   

siyu_yangyang 发表于 2014-04-29 08:32

回复 7# Tinnal


我那个bpf过滤没有问题
struct bpf_insn insns[] = {

52.    BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),   
59.    BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETHERTYPE_IP, 0, 10),
60.    BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 23),
61.    BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, IPPROTO_TCP, 0, 8),
62.    BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 20),
63.    BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 0x1fff, 6, 0),
64.    BPF_STMT(BPF_LDX+BPF_B+BPF_MSH, 14),
65.    BPF_STMT(BPF_LD+BPF_H+BPF_IND, 14),
66.    BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 79, 2, 0),
67.    BPF_STMT(BPF_LD+BPF_H+BPF_IND, 16),
68.    BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 79, 0, 1),
69.    BPF_STMT(BPF_RET+BPF_K, (u_int)-1),
70.    BPF_STMT(BPF_RET+BPF_K, 0),
71.};

Tinnal 发表于 2014-04-29 08:36

回复 10# siyu_yangyang
要善用百度!!!!大哥。等你发现百度解不了你的问题,就要用google。这么初级的问题,论坛也很少人会答的。

给你个链接,也是百度出来的。
http://blog.csdn.net/leeshuheng/article/details/7729514


   

Tinnal 发表于 2014-04-29 08:43

回复 12# siyu_yangyang

你原来的代码连那个笑脸都没有,出来个笑脸,还有可能是代码没有问题,只是你不会贴代码。但没有笑脸的版本你让我如何认为你的代码是对的呀。
chinaunix论坛的发贴窗口里是有专门粘代码的功能的,看看在线编辑器的工具栏。

   

siyu_yangyang 发表于 2014-04-29 08:52

回复 13# Tinnal


    大哥们,哥们学了两天了,五一前要把东西做出来!经理逼的紧呀!

Tinnal 发表于 2014-04-29 08:59

回复 15# siyu_yangyang
跳槽吧。呵呵。

   

Tinnal 发表于 2014-04-29 09:03

回复 15# siyu_yangyang
想效率快,问题少,维护容易,请用RF_RING+libpcap或直接原生libpcap。
想性能好就直接用PF_RING吧。

   

siyu_yangyang 发表于 2014-04-29 09:09

回复 16# Tinnal


    大哥们,小弟还没有大学毕业,怎么能跳槽呢?我用的代码来源于pf_ring里面的pfcount.c,这个开源代码,PF_RING里面包括libpcap,

typedef struct {
u_int16_t rule_id;               /* Rules are processed in order from lowest to higest id */
rule_action_behaviour rule_action; /* What to do in case of match */
u_int8_t balance_id, balance_pool; /* If balance_pool > 0, then pass the packet above only if the
                                        (hash(proto, sip, sport, dip, dport) % balance_pool) = balance_id */
u_int8_t locked;                     /* Do not purge with pfring_purge_idle_rules() */
u_int8_t bidirectional;             /* Swap peers when checking if they match the rule. Default: monodir */
filtering_rule_core_fields   core_fields;
filtering_rule_extended_fields extended_fields;
filtering_rule_plugin_action   plugin_action;
char reflector_device_name;

filtering_internals internals;   /* PF_RING internal fields */
} filtering_rule;
配置这个结构体,调用pfring_add_filtering_rule(pd, &rule))函数生成规则,主要是怎么配置这个结构体才能生成过滤一组的IP数据包呢

siyu_yangyang 发表于 2014-04-29 09:11

回复 17# Tinnal


    求,哥哥们给点代码,可以做参考!

Tinnal 发表于 2014-04-29 14:10

本帖最后由 Tinnal 于 2014-04-29 14:14 编辑

晕,作为学生,你更应该去自己研究呀。采用libpcap的代码,前面的回复已经给你链接了呀。
研究生了,要学会学习。
已经学过很多遍,尤其对于你们学生,先要做得出来,再考虑做好。
页: 1 [2]
查看完整版本: PF_RING的pfcount没有抓到包