记录通过给定接口和端口的完整HTTP请求和响应

时间:2017-09-22 16:30:47

标签: http pcap tshark

我正在寻找一个命令,我可以运行以在我的本地环回上观察端口5000,并在其上记录完整的HTTP请求和响应,实时,无需转储到文件并对其进行后处理。期望的输出看起来像:

GET /index.html HTTP/1.1
Host: www.example.com

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close

<html>
<head>
  <title>An Example Page</title>
</head>
<body>
  Hello World, this is a very simple HTML document.
</body>
</html>

我尝试过使用tshark -i lo0 -d tcp.port==5000,http -Y http,但是没有打印HTTP请求和响应的完整内容,而且会打印出许多我不关心的额外内容:

   13   2.644627    127.0.0.1 → 127.0.0.1    HTTP 387 POST /battsim/loadprofile HTTP/1.1  (application/json)
   21   2.692109    127.0.0.1 → 127.0.0.1    HTTP 57 HTTP/1.0 200 OK  (application/json)
   32   2.706703    127.0.0.1 → 127.0.0.1    HTTP 100 PUT /battsim/loadprofile/3b3135f0-b8aa-4ece-94c2-e9baf1c4998e/data HTTP/1.1  (text/csv)
   37   2.722450    127.0.0.1 → 127.0.0.1    HTTP 244 HTTP/1.0 500 INTERNAL SERVER ERROR  (text/html)

2 个答案:

答案 0 :(得分:2)

为此目的有几种工具,它们通常称为“httpflow”。一个例子是https://github.com/six-ddc/httpflow,它看起来正是你想要的,即只是转储数据。

答案 1 :(得分:1)

tshark的cron jobs选项可能就是你要找的东西。它需要一个流编号并输出流内容。例如,-z follow从捕获文件tshark -r tmp.pcap -z follow,tcp,ascii,1输出TCP流1的内容。

要检索捕获文件中的所有TCP流内容,您可以使用:

tmp.pcap
然而,

for stream in $(tshark -r tmp.pcap -T fields -e tcp.stream | sort -un) do tshark -r tmp.pcap -z follow,tcp,ascii,$stream done 需要整个捕获文件来提取流内容。如果要在线提取HTTP请求,则需要使用除tshark之​​外的其他内容。