如何能远程接收到自定义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包的程序,我也可以发给你我写的接收程序互相交流.谢谢
以下是我的测试:
现有主机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包的程序,我也可以发给你我写的接收程序互相交流.谢谢
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]
有不会的问题就上来问,然后解决了问题不公布答案
典型的zzzzzz
想了两个方案: 1 发送Raw Socket 发送Echo报文,类似Ping功能.
2 直接从驱动上读 网卡的状态.
请 大家 帮我指点 一下, 第二个方案可行不?