1

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

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

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

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

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

它说:

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

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

4

2 回答 2

3

根据这些 文章,Microsoft 在不可移除的修补程序中从 Windows 中移除了原始套接字支持。因此,除非您想切换到另一个操作系统,否则您可能会不走运。

于 2009-04-22T01:58:36.017 回答
0

我认为向套接字调用添加新协议将是一件相当困难的事情。您必须确保套接字支持该调用。我认为您必须重新编译套接字函数,而且我认为这在 Windows 下并不容易。

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

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

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

如果您真的想像变量名所暗示的那样使用原始以太网,那么您可以使用 winpcap 驱动程序或编写自己的驱动程序

我认为原始以太网没有另一种“简单”的解决方案。winpcap 相当简单,所以你可能想检查一下

于 2009-04-22T01:59:22.550 回答