免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4581 | 回复: 3
打印 上一主题 下一主题

raw ip_hdrincl的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-12 18:04 |只看该作者 |倒序浏览
碰见了一个问题,在用raw socket发送数据的时候,设置选项 为IP_HDRINCL,然后把数据发出去,用tcpdump可以监视到发送的源目的,但是目的地址死活都是0。0。0。0,源代码可直接编译执行,
谢谢大家帮我看看怎么个事情。

rawsend.tar

10 KB, 下载次数: 152

论坛徽章:
0
2 [报告]
发表于 2009-08-13 09:15 |只看该作者
自己顶,否则就沉了!!

论坛徽章:
0
3 [报告]
发表于 2009-08-15 14:06 |只看该作者
因为strncpy遇到0也会停止复制,因此

  strncpy (buffer_send, (void *) &ih, sizeof (struct iphdr));
  strncpy (buffer_send + (sizeof (struct iphdr)), (void *) &th, sizeof (struct tcphdr));

改成
  bcopy ((void *) &ih, buffer_send , sizeof (struct iphdr));
  bcopy ( (void *) &th, buffer_send + (sizeof (struct iphdr)), sizeof (struct tcphdr));
就行了

论坛徽章:
0
4 [报告]
发表于 2009-08-15 14:53 |只看该作者
还有

  fd_raw = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);

protocol为raw才能设置hdrincl.

  if (0 != setsockopt (fd_raw, IPPROTO_IP, IP_HDRINCL, &ip_hdrincl, sizeof (int)))

言外之意就是protocol为udp或tcp时,内核都会为你build ip header。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP