免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
31 [报告]
发表于 2010-07-19 13:09 |只看该作者
运行上述程序出现以下问题。在没有发icmp报文时,从内核接到一个36字节的报文,内容如下:
24000000 02000 ...
kangle000 发表于 2010-07-19 09:23

是什么样的报文,打印一些头部信息出来

论坛徽章:
0
32 [报告]
发表于 2010-07-20 09:28 |只看该作者
本帖最后由 kangle000 于 2010-07-20 09:32 编辑

回复 31# Godbach


这是运行结果:
recv bytes =36, nlmsg_len=36, indev=, datalen=0, packet_id=ffffffff
0000:  00 00 00 00 00 00 00 00 00 00 00 00 00 00
Ping request from Linux.  Dropped!
24000000 02000000
00000000 b2070000
ffffffff 1c000000
12000100 00000000
b2070000

这36字节是ipq_read之后buf中的内容。我对源代码的唯一修改时在while中的ipq_read之前加了一句memset(buf, 0, 512),不初始化的话在后面的memcpy会出现段错误

论坛徽章:
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
33 [报告]
发表于 2010-07-20 09:30 |只看该作者
也就是IP数据部分是36字节吧。我原程序中假设WIN下ping 是32字节,其他算成Linux的,是一个不完整的假设。

你这里是可以抓到IP的头部吧,把IP头部的信息打印出来看看

论坛徽章:
0
34 [报告]
发表于 2010-07-20 09:39 |只看该作者
回复 33# Godbach


    源ip和目的ip都是0.0.0.0,我觉得这不是一个报文,是不是内存缓冲区的一些内容啊?

论坛徽章:
0
35 [报告]
发表于 2010-07-20 09:40 |只看该作者
回复 33# Godbach


    用wireshark没有抓到包,也就是这时候网卡没有数据包通过

论坛徽章:
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
36 [报告]
发表于 2010-07-20 10:13 |只看该作者
loopback的包吗?

论坛徽章:
0
37 [报告]
发表于 2010-07-20 11:14 |只看该作者
回复 36# Godbach


    好像不是,我把规则改成iptables  -I INPUT -i eth0 -p icmp -j QUEUE之后还是一样的

论坛徽章:
0
38 [报告]
发表于 2010-07-31 02:30 |只看该作者
学习关注混分

论坛徽章:
0
39 [报告]
发表于 2013-02-06 14:41 |只看该作者
好文章 学习了。。。

论坛徽章:
0
40 [报告]
发表于 2014-03-25 15:31 |只看该作者
请教一下各位:

执行ipq_user_rw:
[root@localhost ipq_user]# ./ipq_user_rw
ipq_creat_handle success!
ipq_set_mode: send bytes =44, range=1024

执行到这里后,发现程序断不住(也就是还没有来得及从另一台主机发送数据过来,程序并没有处于等待接受内核数据包的状态),直接收到了内核发过来的一个数据报,随后程序就退出了,不知道是什么原因?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP