CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

自己写ping 程序如何发送大包(包长大于10000)用原始socket ??求急

楼主ljp940531(ljp)2005-08-02 18:39:29 在 VC/MFC / 网络编程 提问

自己写ping   程序如何发送大包(包长大于10000)用原始socket   ??  
   
  如果自己填写IP头好象不行,因为要大包要分片。。。。‘  
  但是我如果直接用原始socket   发送包只能在8k大,再大就会发送失败;  
   
  用  
          n32SndBuf   =   12000;  
          errno   =   0;  
          result   =   setsockopt(pingSockFd,SOL_SOCKET,SO_SNDBUF,    
                              (char   *)(&n32SndBuf),   sizeof(n32SndBuf));  
  增大发送缓冲区,如此设置会失败;但是如果是udp   的socket就没问题  
  难道raw   socket   不能设置SO_SNDBUF???  
  问题点数:100、回复次数:9Top

1 楼orbit(走了走了)回复于 2005-08-02 18:49:50 得分 20

TCP/IP协议规定IP包可以是65535字节,但是不同的操作系统都有更严格的限制。通常不是很大  
   
  如果你不是想做碎片攻击哪里需要发送那么大的数据包?Top

2 楼windcsn(向所有的朋友学习!)回复于 2005-08-02 20:28:17 得分 10

你使用RAW   SOCKET,使用的什么协议呀Top

3 楼ljp940531(ljp)回复于 2005-08-03 08:39:31 得分 0

to     orbit(走了走了)    
  我们设备需求   用户说需要支持大包ping   的功能,以测试设备网口的性能。  
   
    to     windcsn(向所有的朋友学习!)    
   
  ping   当然是ICMP协议了。。。Top

4 楼qrlvls( 空 气 )回复于 2005-08-03 08:55:49 得分 10

不需要这么大,只需要自己实现分片就好了,只要Identify连续就好Top

5 楼ljp940531(ljp)回复于 2005-08-06 10:30:50 得分 0

to     qrlvls(空   气)  
   
  请问如何实现自己分片啊。。。谢谢救急啊。。。。  
   
  能写  
    myIPHead.ip_verlen=(iIPVersion<<4)|ipsize;  
    myIPHead.ip_tos=0x27;  
    myIPHead.ip_id=0;  
    myIPHead.ip_offset=0;   /*在这里循环加1就可以了???*/  
    myIPHead.ip_ttl=78;  
    myIPHead.ip_protocol=IPPROTO_ICMP;  
    myIPHead.ip_checksum=0;  
    myIPHead.ip_srcaddr=inet_addr("10.50.41.2”);  
  。。。Top

6 楼qrlvls( 空 气 )回复于 2005-08-06 10:36:51 得分 40

ICMP   的包大于   10000?不知道这样做的目的  
  ip_id   需要循环加   1,而不是   ip_offset   循环加   1  
  分片偏移的处理方法建议你参考   TCP/IP   详解   卷一   第三章Top

7 楼ljp940531(ljp)回复于 2005-08-06 12:38:36 得分 0

非常谢谢   qrlvls(空   气)   (  
   
    myIPHead.ip_verlen=(iIPVersion<<4)|ipsize;  
    myIPHead.ip_tos=0x27;  
    myIPHead.ip_id=0;   /*这个好想不需要变化,是在一个ping包各个分段一个值*/  
    myIPHead.ip_offset=0;   /*在这里加上每片的大小位移,一般是1480   (抓包看到的)*/  
    myIPHead.ip_ttl=78;  
    myIPHead.ip_protocol=IPPROTO_ICMP;  
    myIPHead.ip_checksum=0;  
    myIPHead.ip_srcaddr=inet_addr("10.50.41.2”);Top

8 楼qrlvls( 空 气 )回复于 2005-08-06 13:55:48 得分 10

对于固定的应用可以直接将包写定,但是如果是比较复杂的应用则需要从原理上去理解Top

9 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-08-06 19:39:30 得分 10

还有:  
  标志字段(48~50位)用其中一个比特表示“更多的片”,除了最后一片,其他组成数据报的  
  片都要将改比特置1。Top

相关问题

  • RAW_socket原始套接字截获数据包后的处理问题!在线等!哪位大哥救救我!
  • 据说,用SOCKET创建原始套接字,并把网卡设置成“混杂摸式”,就能捕捉到所有从网卡进来的原始网络数据包,恳请各位高手指点指点,哪怕是提供一些相关资料!!
  • WINPCAP真的可以发送原始数据包吗?
  • 经常收到ping包?
  • 有没有用C封装socket函数封装的比较好的代码,包括封装了ping,能得到网络状态等功能(低手免进)
  • 请问是否有用原始套接字实现异步socket功能的类?
  • 关于socket软件包?
  • 紧急求助ACE中的ACE_Ping_Socket
  • 奇怪,无法Ping通300以上包~~~~
  • 请教:在用CB6做socket编程时,调用函数WSASocket()构造原始套接字遇到的问题

关键词

  • socket
  • 协议
  • ip
  • 包
  • sndbuf
  • n32
  • 原始
  • ping
  • 发送
  • 需要

得分解答快速导航

  • 帖主:ljp940531
  • orbit
  • windcsn
  • qrlvls
  • qrlvls
  • qrlvls
  • zengwujun

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo