接收整个UDP数据包 我正在编写一个UDP代理应用程序,用于C++中用Winsock发送和接收UDP数据包的Windows。问题是我需要处理整个数据包,而不仅仅是数据和UDP和/或IP报头。我尝试过IP_HDRINCL的原始套接字(可能拼写错误),但它仍然会从数据包中删除一些信息。如果winsock中不可能的话,是否有某种库或其他东西可以让我完成这项工作?

接收整个UDP数据包 我正在编写一个UDP代理应用程序,用于C++中用Winsock发送和接收UDP数据包的Windows。问题是我需要处理整个数据包,而不仅仅是数据和UDP和/或IP报头。我尝试过IP_HDRINCL的原始套接字(可能拼写错误),但它仍然会从数据包中删除一些信息。如果winsock中不可能的话,是否有某种库或其他东西可以让我完成这项工作?,c++,windows,sockets,packet,C++,Windows,Sockets,Packet,对于接收数据包,可以让您完成所有这一切,还有一些示例代码显示如何捕获到达接口的所有数据包。以下是一些在windows中过滤数据包的方法: Windows 7、2008或更高版本上的免费开源项目工作 上面的网络层 商用、Windows XP和更高版本。数据链路 层 ,商业。数据链路层 样品 要创建WinDivert使用的调用驱动程序,您现在应该 实现内核驱动程序。网络层 也许你可以解释一下你所需要的其他哪些信息不是你提供的API提供的。使用winsock,它通常只传递数据,以及某些结构中的头信息。

对于接收数据包,可以让您完成所有这一切,还有一些示例代码显示如何捕获到达接口的所有数据包。

以下是一些在windows中过滤数据包的方法:

  • Windows 7、2008或更高版本上的免费开源项目工作 上面的网络层
  • 商用、Windows XP和更高版本。数据链路 层
  • ,商业。数据链路层
  • 样品 要创建WinDivert使用的调用驱动程序,您现在应该 实现内核驱动程序。网络层

  • 也许你可以解释一下你所需要的其他哪些信息不是你提供的API提供的。使用winsock,它通常只传递数据,以及某些结构中的头信息。对于原始套接字,如果内存可用,它将去掉以太网报头。我只想要绝对简单、完整、完整的数据包,根本不需要修改。我已经看到WinPCAP可以让您发送完全符合您需要的数据包,但是您可以用与winsock类似的方式接收数据包,包括bind()和所有内容吗?我认为使用WinPCAP时,您必须接收所有发送到计算机上任何端口的数据包。不一定——请看上面示例代码链接上的第二个示例,它显示了如何设置过滤器,这将允许您只接收您感兴趣的数据包。不,您不需要使用bind()等。;你只是收到了原始的数据包。我在这个计算领域并不在行,但是接收你的计算机得到的每一个数据包并对其进行过滤不会比只接收你想要的数据包慢很多吗?这取决于它们在哪里被过滤。所有到达计算机的软件包都需要进行过滤。PCAP在内核中进行过滤(afaik),因此它不会比过滤窗口执行的速度慢很多。您需要保持混杂模式处于非激活状态,因为此过滤器通常直接在硬件中实现。其他的一切都是在CPU上完成的。除此之外的最后一点是,在有线以太网中,计算机连接到的网络交换机几乎可以确保只将用于该计算机或广播的数据包发送到该计算机。因此,即使启用了混杂模式,也几乎没有额外的开销。当然,WiFi是另一回事。