【问题标题】:Raw Ethernet Frames Using Winsock使用 Winsock 的原始以太网帧
【发布时间】:2010-10-20 11:54:19
【问题描述】:

我正在将一个通信库从 Linux 移植到 Windows。我知道我的方法在很大程度上是什么。该库使用所有原始以太网级帧进行所有通信。

我要移植的库使用 PF_PACKET 系列和 struct sockaddr_ll。浏览 MSDN winsock 站点后,我没有找到等效的族/结构。我的方法应该是什么?

我有一些想法,但我不确定它们是否是好想法 对于未指定,我可以使用 PF_UNSPEC。 我可以传递 PF_PACKET 代表的数字(这是一个无符号短) 我也可以在 Windows 中创建自己的 sockadddr_ll 结构。

这些想法对我来说似乎都不好,它们只是看起来不太可能奏效的技巧。

如果有人有任何建议,我将不胜感激。

【问题讨论】:

    标签: windows linux networking winsock porting


    【解决方案1】:

    我假设您指的是原始套接字(您必须在其中编写网络层、传输层和应用层信息)。新的 Windows 版本(XP SP2 及更高版本)对原始套接字的支持非常有限,有很多限制。

    More info(向下滚动到“原始套接字的限制”)

    我相信解决方案是使用WinPcap,它允许您在这些系统上使用send raw packets

    【讨论】:

    • 好的,原始套接字的限制不适用于我。我的应用程序只上升到第二层。也就是说,我只需要发送/接收以太网帧,不需要 TCP/UDP/IP。
    • 确实如此。看看用 WinPcap 发送原始数据包的例子,你会找到你需要的:)
    • windows 中不允许低于第 3 层的任何内容。
    • 您可以使用 WinPcap 制作和发送 TCP 数据包 - 但您会遇到问题,因为 Windows tcp.sys 仍会处理任何响应并在不考虑您注入的数据包的情况下采取行动!
    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2017-12-26
    • 2014-02-21
    • 2012-08-27
    • 1970-01-01
    • 2011-09-30
    • 2018-09-14
    相关资源
    最近更新 更多