记录通过给定接口和端口的完整 HTTP 请求和响应
log full HTTP requests and responses going through a given interface and port
我正在寻找一个命令,我可以 运行 在我的本地环回上监视端口 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)
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"。一个示例是 https://github.com/six-ddc/httpflow,它看起来正是您想要的,即只是转储数据。
我正在寻找一个命令,我可以 运行 在我的本地环回上监视端口 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)
tshark 的 -z follow
选项可能就是您要找的。它需要一个流编号并输出流内容。例如,tshark -r tmp.pcap -z follow,tcp,ascii,1
从捕获文件 tmp.pcap
.
要检索捕获文件中的所有 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"。一个示例是 https://github.com/six-ddc/httpflow,它看起来正是您想要的,即只是转储数据。