【问题标题】:Why client cannot parse the http packet built and sent by libnet?为什么客户端无法解析 libnet 构建和发送的 http 数据包?
【发布时间】:2015-03-30 09:48:46
【问题描述】:

我使用 libnet 构建函数构建了一个 http 数据包,并通过 libnet_write 发送它。我看到数据包通过wireshark发送成功,tcp和ip头都没问题。但是客户端无法解析我的数据包。例如,当我发送“HTTP/1.1 200 OK”数据包时,客户端没有加载html;当我发送“HTTP/1.1 302 临时移动”数据包时,客户端不会跳转到重定向站点。等等。

【问题讨论】:

  • 仅仅因为它被发送,并不意味着有效载荷不是垃圾,对吧?也许包括你如何构建数据包会很有用。
  • 感谢您的回答。负载,即 http 数据,如下所示: "HTTP/1.1 302 Moved Temporarily\r\n" "Location: example.com\r\n" "Content-Type: text/html\r\n" "Content -Length: 0\r\n" "Connection: close\r\n" "\r\n" 不知道有什么问题? @FiddlingBits

标签: c linux http libnet


【解决方案1】:

您在问题中没有提供代码,也没有提供您构造的数据包的示例,但是 HTTP 通过 TCP 运行,并且您提到只编写一个数据包。这行不通。建立 TCP 连接需要写入 SYN 数据包,读取 SYN/ACK 响应,并写入最终 ACK。

只有经过这三包交换后,才能发送带数据的 TCP 包。

另外,你为什么要这样做也不清楚。如果您希望 HTTP 服务器接收数据,您应该使用普通的套接字 API 构造和发送它。

【讨论】:

  • 感谢您的回答。我的系统部署在网关的旁路上,可以监控内部流量,如果客户端尝试请求某个站点,我将向服务器发送 RST 并向客户端发送重定向数据包。例如,如果客户端尝试访问 google.com,我需要将其重定向到 facebook.com。我使用 libpcap 捕获数据包,通过 libnet 构建和发送新数据包。构建包的信息是从最后一个客户端 HTTP GET 请求包中获取的。 @山姆罗伯茨
  • 现在,我可以中断与服务器的连接,但是,使用wireshark,我可以看到客户端在收到302重定向数据包后没有向新站点发送新请求。我感觉客户端的浏览器没有解析libnet构建的http包。 @山姆罗伯茨
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多