使用Winsock的原始以太网帧

dev*_*vin 6 linux windows networking porting winsock

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

我移植的库使用PF_PACKET族和struct sockaddr_ll.浏览MSDN winsock站点后,我还没有找到一个等效的系列/结构.我的方法应该在这里?

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

这些想法对我来说都不好看,它们看起来就像是不太可能有效的黑客.

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

Azi*_*ziz 4

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

更多信息(向下滚动到“原始套接字的限制”)

我认为,解决方案是使用WinPcap,它允许您在这些系统上发送原始数据包

  • 您可以使用 WinPcap 制作和发送 TCP 数据包 - 但您会遇到问题,因为 Windows tcp.sys 仍会处理任何响应并采取行动,而不考虑您注入的数据包! (3认同)
  • 窗口中不允许出现第 3 层以下的任何内容。 (2认同)