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

记录通过给定接口和端口的完整HTTP请求和响应,http,pcap,tshark,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 Conten

我正在寻找一个命令,我可以运行它来监视本地环回上的端口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的
-z follow
选项可能就是您想要的。它获取流编号并输出流内容。例如,
tshark-r tmp.pcap-z follow,tcp,ascii,1
从捕获文件
tmp.pcap
输出tcp流1的内容

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

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

-z follow
但是需要整个捕获文件来提取流内容。如果您想在线提取HTTP请求,则需要使用tshark以外的工具。

有几种工具可用于此目的,它们通常被称为“httpflow”之类的工具。一个例子是,它看起来正是您想要的,即只是转储数据。

@SteffenUllrich看起来很完美,我很乐意让大家接受答案
tshark
中似乎有很多事情只能通过转储到
.pcap
文件,然后进行后处理来完成…我正在寻找一个选项,当有东西进来时可以打印到控制台上。你需要一个专用的工具来实现这一点(如Steffen Ullrich提议的那样),tshark更适合于每包分析。我没有比较过这类工具,所以我没有将其包括在我的答案中(不想偏向于我所知道的唯一工具).是的。我很惊讶我花了这么长时间才找到我想要的东西,我以为人们会一直在调试HTTP流量。我通常在应用程序级别使用日志进行调试。使用TLS加密会更容易…我理解你的意思,但我试着确认第三方lib正在发送带有日志的请求我使用了传输编码,并且没有一种简单的方法使lib打印其原始http请求,所以使用外部工具是我最好的选择。
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