在Winsock中实现原始以太网
问题描述:
我正在做一个项目,我必须制作自定义数据包。也就是说,我必须控制每个数据包头。我正在尝试使用套接字来做到这一点。基本上,我需要做的是:在Winsock中实现原始以太网
SOCKET s = socket(PF_UNSPEC, SOCK_RAW, ethernet_type);
ethernet_type是自定义的东西,非标准的,如0xAAAA。我正在使用htons()。另外,我最好不要使用winPcap。
现在,我得到错误10043,协议不支持。
错误消息似乎表明我可以配置协议到我的系统,但我不知道如何做到这一点。
它说:
协议不支持。请求的协议尚未配置到系统中,或者没有实现它。例如,一个套接字调用请求一个SOCK_DGRAM套接字,但指定一个流协议。
这里有几个不同的问题,所以如果任何人有任何意见,我会非常感激。
答
我认为将新协议添加到套接字调用中会非常困难。您必须确保该套接字支持该呼叫。我想你将不得不重新编译套接字函数,我不认为在Windows下很容易。
制作定制包,不需要你创建一个新的协议
我认为指定原始套接字的正确的方法是这样的
SOCKET s;
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
如果你真的想一起玩原始以太网喜欢你的变量名称建议,那么要么你使用winpcap驱动程序或写your own driver
我不认为有另一种“简单”的原始以太网解决方案。 winpcap很容易,所以你可能想看看它
我可以使用其他选项打开原始套接字。此外,错误是关于协议类型(最后一个选项,我称之为ethernet_type)。 – devin 2009-04-22 02:03:24