如何能远程接收到自定义ip头的报文?
    
   以下是我的测试:
   现有主机A,主机B,
   在主机A上,用raw socket,sendto一个udp包(自定义了ip头,包括id和offset[3位标识,13位偏移量]),  在主机B上用raw socket接收程序(raw socket 做的sniffer)接收却接收不到来自主机A发来的udp包.我换用权威软件sniffer pro 在主机B上却能捕获到主机A发来的udp报文,且ip头校验位,udp头校验都正确.   因此我怀疑的raw socket接收程序有问题,而不是自定义的ip包有问题.求一份能接收字定义格式的udp包的程序,我也可以发给你我写的接收程序互相交流.谢谢

解决方案 »

  1.   

    自定义IP头,示例可以参考《Windows网络编程》CH13.4
      

  2.   

    主机B上用的raw socket是IP raw socket??还是udp raw socket????应该使用ip raw socket
      

  3.   

    主机B接收程序本程序去掉容错处理.
             sock_recv = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0,0);              //设置IP头操作选项    
     BOOL optval= TRUE;
             setsockopt(sock_recv, IPPROTO_IP, IP_HDRINCL, (char*)&optval, sizeof(optval)) ;
     
    ra.sin_family=AF_INET;
    ra.sin_port = htons(5000);  //发送是往B主机5000端口发的
    ra.sin_addr.S_un.S_addr = inet_addr("主机B ip地址"); 
             ....................  1.我参照了标准格式写的,内容填写没有错误,因为我用sniffer pro在B主机上抓来核对了。
      2.利用raw socket写的接收程序(只是在网络层用一些api)能否实现抓取所有的报文(winxp sp2,sp1),这确让我怀疑起来了。我也从网上下载了几个别人用raw sock写的侦听程序,一样只能收部分报文(大多是.255后缀的ip,偶尔也有非广播组播的,其实这些我并不关心,我只想收到我自己定义了ip头的udp报文),但我从另外一台电脑上发来的自定义ip头的udp报文却收不到.
      3.很想了解是否大名鼎鼎的sniffer pro是怎么做的,如果是从数据链路层及以下开发驱动做基础的,我用vc.net就想放弃这个任务了。请有做过接收自己定义报文的人指点迷津。                                  my email : [email protected]
      

  4.   

    鄙视楼主
    有不会的问题就上来问,然后解决了问题不公布答案
    典型的zzzzzz
      

  5.   

    主机A上没必要一定要用raw socket吧
      

  6.   

    我最近也在做类似的 的 任务任务:完成对网卡的网络连接状态的检测.
    想了两个方案:  1 发送Raw Socket 发送Echo报文,类似Ping功能.
                   2 直接从驱动上读 网卡的状态.
     
    请 大家 帮我指点 一下, 第二个方案可行不?