我正在开发一个网络捕获脚本,我只想在 HTML 正文或 URL 包含 .txt 文件中定义的字符串时转储流量。
这是我的 tshark 命令,它转储src ip dest url
(HTTP 主机),它的工作方式就像一个魅力。
tshark -i eth1 'port 80' -R 'http.request' -T fields \
-e frame.number -e frame.time -e ip.src -e http.host \
-e http.request.uri -E header=y -E separator=, \
-E quote=d -E occurrence=f
现在我被困住了。当用户浏览到 hidemyass 或 HTML 正文包含色情等关键词时,如何才能仅触发此转储?
答案1
你可以使用ngrep。
它支持数据包的 pcap 过滤器和正则表达式匹配。例子:
ngrep -tqW byline 'somethingbad|banana' port 80
将通过端口 80 查找包含请求或响应正文的数据包,其中包含“somethingbad”或“banana”。
注意事项:
- 如果您的关键字分散在多个数据包中,则它将不匹配。
- 只有匹配关键字的数据包才会被捕获。因此,如果您想要跨越与事务相关的多个数据包的整个请求/响应正文,它会变得更加复杂。
答案2
简短的回答:你不能。
长答案:Wireshark 适用于第 1-6 层(最好适用于第 1-3 层)。该 http-content-information 位于第 7 层。
因此,如果您想深入了解这里,您可以这样做(沿着这些思路):
tpcdump
持续观察小于 900 字节的 tcp/http 流量(初始 http 请求的典型长度)。如果您遇到“有趣”的 URL,请触发相关连接的完整转储。
您也可以通过持续的完整转储来做到这一点,但在这种情况下,您的嗅探器服务器很可能会遇到性能问题。
无论如何,您都需要第二个进程来过滤/触发 tcpdump 输出。
另一种方法是编写wireshark
-gui 脚本或使用它来捕获有问题的数据包。