如何安全地捕获或复制到Web服务器的传入请求

我们接pipe了一个我们无法修改的遗留Web应用程序(源代码被破坏,部署失败),最终我们将重写。 理想情况下,我们会一步一步地迁移它,但这是不可能的,因为我们不能有效地修改应用程序。

我负责重写应用程序,并且还有一些复杂的同步algorithm,我想根据当前API发布的数据进行testing。

用所有相关数据捕获传入HTTP请求的最简单最安全的方法是什么? 该解决scheme必须对API用户透明。 服务器在Ubuntu Linux上运行,我们可以通过SSH访问它。 Web应用程序在Ruby上运行在Apache 2上。

  • 使用某种数据包嗅探器来捕获传入stream量。 我不得不找出一种方法来重播这些请求对我自己的服务器。
  • 将DNS更改为指向另一个将捕获和logging请求数据的IP,然后将请求redirect到生产服务器。 我不认为我们有访问networking基础设施,所以我认为这必须作为一个Web服务执行,返回一个带有redirect头到真实服务器的请求。 似乎脆弱,可能会造成浏览器的安全问题?
  • 使用某种Apache模块来做到这一点。

上述解决scheme如何比较:

  • closures服务器和/或网站所带来的风险
  • 易于实施

请随时提出任何进一步/更好的select。

我将使用tcpdumpngrep ,将交换机上的端口连接到Web服务器镜像将会很好,但是如果没有,您可以在服务器上运行ngreptcpdump

您将需要超级用户访问权限才能运行这些程序。

你会想要读一下,因为你显然知道你在找什么stream量,ngrep确实允许你select正则expression式的stream量,这可能允许你select更准确的数据包。

ngrep -l -q -d eth0 "^POST " tcp and port 80 -O dump.file

这会让你把任何HTTP数据发送到eth0上的端口80。 你可能能够挑出更具体的东西。 如果您要直接从文件中读取stream量,则可能需要添加-W byline因为它使得数据包更具可读性,因为它遵守换行符,因此您可以看到更多的逻辑写出的数据包)。 -O dump.file将把数据包捕获的输出写入文件。 输出可以像你想的那样详细,重放数据包,看看tcpreplay

捕获它的最简单和最安全的方法是简单地运行一个数据包嗅探器,正如你所build议的。 如果你只是做一个“重放http请求”的网页search,你会得到任何数量的程序,可以捕捉然后重播你的请求。 还有专业的工具,例如在我的工作中使用的“LoadRunner”。

如果你不想安装任何额外的软件,你可以使用tcpdump -s0 -w /path/to/output.file来捕获stream量。 这会给你一个你可以读取的文件,使用“tcpdump -A -r /path/to/output.file”,大概使用诸如“dst = ip.to.webserver”之类的filter。重播它的东西。

这里是我在localhost上使用tcpdump的一个例子:

 $ tcpdump -i lo0 -s0 -w /tmp/tcpdump.out 

同时我从另一个窗口访问localhost上的一个网站; 一旦完成,我将按ctrl-c停止tcpdump

 $ sudo tcpdump -r /tmp/tcpdump.out -t -q -n -A 'tcp dst port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' reading from file /tmp/tcpdump.out, link-type EN10MB (Ethernet) IP 127.0.0.1.57499 > 127.0.0.1.http: tcp 122 E.....@[email protected]................ .9...9..GET /~dyho01/ HTTP/1.0 User-Agent: Wget/1.11.4 Red Hat modified Accept: */* Host: localhost Connection: Keep-Alive 

您可能可以通过在windows程序(如wireshark)中打开原始的tcpdump文件来获得相同的信息。

数据包嗅探器选项是一个很好的select,只要连接没有encryption就行,那么你将是SOL。 在这种情况下,您将需要一个捕获的代理模型,其中用户使用SSL连接到代理,接受代理证书,然后到代理的连接再次在目标主机的SSL下。 诸如LoadRunner,Jmeter之类的testing工具对于为单个用户捕获代理对话是很好的,以允许你检查被传递的信息的结构,但是对于多个用户的生产使用是不切实际的。

我会寻找一个代理服务器软件包,你可以configuration代理将请求转储到日志进行分析。 通过这种方式,您可以在SSL之外获得原始请求的视图,并且必须从数据包级跟踪中重新组合数据包。