在Winsock中实现原始以太网

在Winsock中实现原始以太网

问题描述:

我正在做一个项目,我必须制作自定义数据包。也就是说,我必须控制每个数据包头。我正在尝试使用套接字来做到这一点。基本上,我需要做的是:在Winsock中实现原始以太网

SOCKET s = socket(PF_UNSPEC, SOCK_RAW, ethernet_type); 

ethernet_type是自定义的东西,非标准的,如0xAAAA。我正在使用htons()。另外,我最好不要使用winPcap。

现在,我得到错误10043,协议不支持。

错误消息似乎表明我可以配置协议到我的系统,但我不知道如何做到这一点。

它说:

协议不支持。请求的协议尚未配置到系统中,或者没有实现它。例如,一个套接字调用请求一个SOCK_DGRAM套接字,但指定一个流协议。

这里有几个不同的问题,所以如果任何人有任何意见,我会非常感激。

根据thesearticles,Microsoft在不可移动修补程序中从Windows中删除了原始套接字支持。所以你可能会走运,除非你想切换到另一个操作系统。

+0

我可以使用其他选项打开原始套接字。此外,错误是关于协议类型(最后一个选项,我称之为ethernet_type)。 – devin 2009-04-22 02:03:24

我认为将新协议添加到套接字调用中会非常困难。您必须确保该套接字支持该呼叫。我想你将不得不重新编译套接字函数,我不认为在Windows下很容易。

制作定制包,不需要你创建一个新的协议

我认为指定原始套接字的正确的方法是这样的

SOCKET s; 
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); 

如果你真的想一起玩原始以太网喜欢你的变量名称建议,那么要么你使用winpcap驱动程序或写your own driver

我不认为有另一种“简单”的原始以太网解决方案。 winpcap很容易,所以你可能想看看它