在Winsock中实现原始以太网

时间:2009-04-22 01:44:33

标签: winsock raw-ethernet

我正在做一个我必须制作自定义数据包的项目。也就是说,我必须控制每个数据包标头。我试图使用套接字来做到这一点。基本上,我需要做的是:

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

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

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

错误消息似乎表明我可以将协议配置到我的系统中,但我不知道该怎么做。

它说:

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

这里有一些不同的问题,所以如果有人有任何意见,我真的很感激。

2 个答案:

答案 0 :(得分:3)

根据these articles,Microsoft在不可移动的修补程序中从Windows中删除了原始套接字支持。所以除非你想换到另一个操作系统,否则你可能会失败。

答案 1 :(得分:0)

我认为在套接字调用中添加新协议会非常困难。您必须确保套接字支持该调用。我认为你必须重新编译套接字函数,我不认为它在windows下很容易实现。

制作自定义数据包不需要您创建新协议

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

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

如果你真的想尝试使用变量名建议的原始以太网,那么要么使用winpcap驱动程序要么写your own driver

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