免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: Godbach
打印 上一主题 下一主题

Linux内核IP Queue机制的分析(二)——用户态处理并回传数据包 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2014-03-25 15:41 |只看该作者
和kangle000兄遇到了相同的问题,请问这个问题现在解决了吗?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
42 [报告]
发表于 2014-03-26 11:00 |只看该作者
回复 40# simonximan


你用的内核的版本是什么。现在较新的内核都已经把 ip_queue remove 掉了,新的 是 NF QUEUE 机制。

论坛徽章:
0
43 [报告]
发表于 2014-03-26 14:48 |只看该作者
多谢版主在百忙之中抽出时间回复,我用的是2.6.32-38,可以使用Ip_queue的机制,运行代码到while循环中的ipq_read语句后的memcpy(payload + ETH_HDRLEN, ipq_packet->payload, ipq_packet->data_len)时出现段错误,除非在ipq_read加上memset(buf, 0, 1024),这时会一直循环地打印,并不会等待从其他主机发来数据包。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
44 [报告]
发表于 2014-03-26 15:00 |只看该作者
回复 43# simonximan

你先别 memcpy,打印一下  ipq_packet->data_len 的数值是多少。buf 是否能够容纳下这么长的载荷。

   

论坛徽章:
0
45 [报告]
发表于 2014-03-26 15:42 |只看该作者
多谢提醒,打印出来是:recv bytes = 64, nlmsg_len = 64, indev = , datalen = 1393096, packet_id = ffffffff
payload定义的是无符号的char,确实容纳不下。

论坛徽章:
0
46 [报告]
发表于 2014-03-26 16:45 |只看该作者
这里存在一个疑问了,为什么运行程序就就出现datalen = 1393096呢?不可能有这么大的数据包吧?代码前面不过就是做了ipq_create_handle, ipq_set_mode初始化并通知了内核,怎么通过ipq_read,ipq_get_packet就从内核拿到1393096长度的数据(在没有任何网络主机发数据到本机的情况下)?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
47 [报告]
发表于 2014-03-26 17:58 |只看该作者
回复 46# simonximan


你没有加 QUEUE 的规则吗。

其次,看下 libipq.c 的代码,加一些调试信息吧。这个 datalen 有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP