动态修改HTTP URL

时间:2012-10-05 13:54:54

标签: network-programming packet-injection

是否可以将用户的HTTP请求修改为

www.example.com/options

而不是

www.example.com/options_and_params

我的情况是大约有30000个用户连接到我公司的网络骨干网,我想在骨干交换机和Radware LoadProof之间添加一个或多个服务器(我目前正在处理的代码)来实现这项工作。

在谷歌搜索过夜之后,我没有领导,只有一些问题:

  1. 我不需要通过网络拦截每个数据包。有了像iptables这样的帮助,我可以过滤掉我想要的包。我在使用iptables之前已经完成了。但是,数据包不等于HTTP流。我需要进行HTTP重构吗?
  2. 如果我成功找到修改HTTP请求URL内容的方法,我仍然应该将其放回网络流。据我所知,TCP数据包有校验和,在修改内容后,它一定是错误的。如何计算新的校验和并将数据包放回网络?
  3. 这是我第一次进行网络编程或数据包处理开发。任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

这取决于您是在执行HTTP / 1.0还是HTTP / 1.1,以及它是否需要修改初始请求或单个HTTP 1.1会话中的所有请求。

如果您有数据包并且可以在发送之前对其进行修改,并且您尝试仅修改请求,则会给出典型数据包的长度以及HTTP请求流中URL的位置(非常接近开头) )以及它将是TCP流中发送的第一件事,我认为你可以相当安全地假设它将出现在发送的第一个数据包的前N个字节中,因此不会分成多个数据包。

但是,如果这是一个HTTP / 1.1流,那么将通过相同的TCP连接发送多个请求,在这种情况下,在将来的请求中,URL可能会被分割为两个TCP数据包。

如果您可以强制HTTP / 1.0,或者如果您将初始或所有请求修改为HTTP / 1.0,那么您可以非常确定第一个数据包将对应于TCP流的第一个数据包而您是不太可能看到URL分裂多个数据包,这意味着没有重建和只能进行替换的能力。

然而,这将以新的TCP连接为代价,效率非常低。

如果你不这样做,你将它保留为HTTP / 1.1,则URL可以在任何将来的请求中的任何随机点,因此可以分割多个TCP数据包(实际上,两个TCP数据包的大小)。

答案 1 :(得分:0)

如果我的问题是正确的,那么这可能是通过像nginx这样的快速反向代理完成的。