我有一个 linux box 作为许多客户端和互联网之间的路由器,我需要提取一些关于使用情况的统计数据:我需要记录哪些内部 IP 访问哪些外部地址。
我用它来检查哪些内部 IP 访问哪些外部 IP:
tcpdump -n -i any port 80 or port 443 and src net 192.168.101.0/24
(我使用 -n 并稍后进行查找)
然而,这也向我展示了很多与 TCP 握手和窗口相关的额外信息。是否可以只显示实际的 HTTP 请求?
我发现了一些方法,其中大部分涉及grep
ping for GET\|POST
,但是它去除了 IP,这正是我关心的主要内容。
编辑:
- 除了 tcp + 标准 linux 和 bash 命令之外,我没有使用任何其他东西的奢侈(因此我仅限于 tcpdump 和 grep/strings/awk/sed
- 包括过滤器有
tcp[13] & 2!=0'
帮助吗,据我所知,这只会显示初始 SYN?
如果您仅限于使用本机工具,我认为您可以使用 perl。也许您可以使用这个 perl 脚本。叫做 chaosreader
否则你可以捕获流量并在另一个系统上用 perl 脚本解析它
简而言之,是的。使用
httpry
(和这里)。它是开源的,它基于libpcap
并且非常接近您的需要,因此只需要很少的调整。您可以使用 wiresharks tshark 控制台捕获工具,这里有一些捕获示例,其中一个专门用于捕获 http gets
我个人使用 dsniff 工具中的urlsnarf
(请注意,尽管使用这些工具中的任何一个,您只会获得 http ...https 将受到保护,除非您正在中间人解密。您仍然会看到客户端正在与之交谈的主机,但看不到他们正在访问的完整 url)
您可能还想研究一个名为 ntop 的工具,它提供非常精细的流量报告能力