2010-08-15 126 views
1

我正在用C++编程Windows的UDP代理应用程序,它使用Winsock发送和接收UDP数据包。问题是我需要使用ENTIRE数据包,而不仅仅是数据和UDP和/或IP标头。我尝试了使用IP_HDRINCL的原始套接字(可能拼写错误),但它仍然从数据包中剔除一些信息。有没有某种图书馆或某些东西,如果不可能在winsock中,那会让我完成这个任务吗?接收整个UDP数据包

+1

也许你可以解释你需要的其他信息,而不是你提供的API提供的。 – 2010-08-15 06:15:16

+0

对于winsock,通常它只是将数据传递给你,并且有些结构中的头信息。使用原始套接字时,如果内存服务,它将取下以太网报头。我只想要绝对简单,完整,完整的数据包,根本不需要修改。 – Chroma 2010-08-15 06:19:12

回答

3

对于接收数据包,WinPCAP可以让你完成所有这些工作,并且还有示例代码here,它显示了如何捕获到达接口的所有数据包。

+0

我已经看到,WinPCAP可以让你发送完全像你想要的数据包,但是你可以用类似于winsock的方式接收数据包,使用bind()和一切?我想用WinPCAP你必须收到所有的数据包到您的计算机上的任何端口。 – Chroma 2010-08-15 06:16:34

+0

不一定 - 查看上面示例代码链接的第二个示例,其中显示了如何设置过滤器,它将允许您只接收您感兴趣的数据包。不,不,您不需要需要使用bind()等;你只是得到原始数据包数据。 – 2010-08-15 06:18:16

+0

我对这个计算领域并不了解,但是不会接收你的计算机获得的每一个数据包,只是过滤它比仅仅接收为你准备的数据包慢得多? – Chroma 2010-08-15 06:24:49