1

作为我项目的一部分,我正在尝试向 Google 发送包含 HTTP 请求的 IP 数据包。我正在使用 Winpcap 库和 VC++。目前,我已经完成了 TCP 三向握手数据包,但是在发送 TCP ACK 数据包后,我一直在发送实际的 HTTP 请求数据包。当我使用wireshark捕获数据包时,这个数据包被标记为“重组PDU的TCP段”。协议列也是“TCP”而不是“HTTP”。怎么了?我将如何以这种方式发送 HTTP 数据包?

4

4 回答 4

2

你不一定做错了什么。

默认情况下,Wireshark 将 TCP 数据交给更高级别的协议处理程序——在这种情况下,它会尝试重新组装整个 HTTP 请求和响应。它将重组消息附加到序列中的最后一个数据包,并用“重组 PDU 的 TCP 段”标记其他数据包:

替代文字

您可以禁用此重组功能来检查各个数据包:

  • 编辑 -> 首选项 -> 协议 -> TCP
  • 取消选中“允许子解析器重新组装 TCP 流”
于 2010-11-20T01:20:39.747 回答
1

可能您没有\r\n两次完成请求。

如果您发送GET / HTTP/1.0\r\n字符串,您将不会收到任何数据包。

您必须发送此字符串:GET / HTTP/1.0\r\n\r\n

于 2011-09-15T04:31:27.017 回答
1

为什么要使用 WinPCap 发送数据包?您应该改用普通套接字。更好的是,使用为您实现 HTTP 协议的套接字库,例如 curl,甚至是 Microsoft 自己的 WinInet 或 WinHTTP API。

于 2010-11-20T01:18:47.100 回答
1

如果您打算扩展它,我强烈建议您在尝试此之前学习 HTTP 协议的基础。搞乱原始套接字和抛出获取请求;阅读一些源代码。

但是,我不会真正看到 pcap 的意义。如果您不想编写实际的套接字,您应该能够使用 Wininet 库:Wininet lib

但是,如果您想编写原始套接字,我会继续使用winsocks。有些人很难理解 HTTP 和 TCP 之间的区别。HTTP 基于 TCP,因此它们在技术上都是相同的,TCP 用于数以千计的应用程序。您计算机上的大多数连接都是 TCP。

如果您试图通过 pcap 程序将连接拦截为 MITM 攻击以发送 HTTP 请求,我可能会学习一些 Pcap 编程。这方面有很多教程,比如这个

PS:查找winsocks教程,因为初学者很难理解。此外,并非所有系统都支持 winpcap,并且(在某些情况下)安装起来很麻烦。老实说,使用winsocks来做到这一点会更好。Wininet 有更多的支持,我(不要让我坚持)相信所有的 W2K+ 版本都有 wininet,所以为了兼容性(我认为这对你来说不是问题)问题,我会使用 wininet或温索克斯。

于 2010-11-20T04:29:32.520 回答