2

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

www.example.com/options

代替

www.example.com/options_and_params

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

谷歌搜索了一夜之后,我没有线索,但还有一些问题:

  1. 我不需要通过网络拦截每个数据包。借助 iptables 之类的帮助,我可以过滤掉我想要的包。我在使用 iptables 之前已经完成了。但是,数据包不等于 HTTP 流。我需要重新构建 HTTP 吗?
  2. 如果我成功找到修改 HTTP 请求 URL 内容的方法,我仍然应该将其放回网络流。据我所知,TCP 数据包有一个校验和,在我修改内容后它一定是错误的。如何计算新的校验和并将数据包放回网络?

这是我第一次做网络编程或数据包处理开发。任何建议都值得赞赏。

4

2 回答 2

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 数据包(实际上是两个给定 URL 的大小)。

于 2012-10-12T22:25:21.217 回答
0

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

于 2012-10-12T22:15:51.193 回答