拦截传输层上方的流量

时间:2009-11-30 21:06:09

标签: linux sockets intercept

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

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

由于

编辑:希望从标签和libnetfilter_queue中可以看出 - 这是针对Linux的

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

嗯,我已经完成了我在评论中所建议的内容,并且它确实有效,即使它确实感觉这是一种冗长的方式。

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

如果没有,有什么影响?每个HTTP会话都通过一个不同的端口发生 - 这是否足以让它们完全分开?据推测,考虑到它在NAT后面工作,其中许多会话的地址是相同的。