代码之家  ›  专栏  ›  技术社区  ›  devin

在Winsock中实现原始以太网

  •  1
  • devin  · 技术社区  · 16 年前

    我正在做一个项目,在那里我必须制作定制包。也就是说,我必须控制每个包头。我想用插座来做这个。基本上,我需要做的是:

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

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

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

    错误消息似乎表明我可以在系统中配置协议,但我不知道如何配置。

    它说:

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

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

    2 回复  |  直到 16 年前
        1
  •  3
  •   Rick Copeland    16 年前

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

        2
  •  0
  •   Eric    16 年前

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

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

    我认为指定原始套接字的正确方法如下

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

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

    我不认为还有另一种“简单”的原始以太网解决方案。WinPCAP相当简单,因此您可能需要检查它

    推荐文章