3

首先,我对网络编程比较陌生。我想在 HTTP 流量到达服务器应用程序之前拦截和延迟它。我已经深入研究了 libnetfilter_queue,它为我提供了适当延迟所需的所有信息,但级别太低了。我可以在那里延迟流量,但除非我几乎立即接受 IP 数据报(所以当我想延迟它们时将它们发送到堆栈上),它们将被重新发送(当没有 ACK 到达时),这不是我想要的。

我不想或不需要处理 TCP,只需处理它提供的有效负载。所以我的问题是如何在特定端口到达目的地之前拦截流量,但在 TCP 确认并检查它之后?

谢谢

编辑:希望标签和 libnetfilter_queue 很明显 - 这是针对 Linux

4

2 回答 2

2

通过 HTTP 代理劫持连接。如果您不能只在客户端上设置 HTTP_PROXY,或者设置使用当前服务器的 IP 和端口号运行的过滤器,将真实服务器移动到另一个 IP,那么 Google 提供了一个很好的方法。

所以实际的 TCP 连接是在客户端和你之间,然后是从你到服务器。然后你不必处理 ACK,因为 TCP 总是看到任务完成。

编辑:我看到原来的评论已经想出了这个想法,使用 iptables 通过同一台机器上的透明代理进程重定向流量。

于 2009-12-05T08:40:26.667 回答
1

好吧,我已经完成了我在评论中建议的操作,并且它确实有效,即使它确实感觉是一种冗长的方式。

(或一个)问题是 Web 服务器现在可以理解地认为每个请求都来自 localhost。真的,我希望这种延迟对客户端和服务器都是透明的(当然时间除外!)。对此我能做些什么吗?

如果不是,有什么影响?每个 HTTP 会话都通过不同的端口发生 - 这足以让它们完全分开吗?大概考虑到它在许多会话的地址相同的 NAT 后面起作用。

于 2009-12-01T17:21:54.643 回答