使用tcpdump在路由器上loggingHTTPstream量

我有一个linux的盒子充当许多客户端和互联网之间的路由器,我需要拉一些统计使用情况:我需要logging哪些内部IP访问外部地址。

我用它来检查哪些内部IP访问哪些外部IP:

tcpdump -n -i any port 80 or port 443 and src net 192.168.101.0/24

(我使用-n并在稍后进行查找)

不过,这也显示出了很多与TCP握手和窗口相关的额外function。 是否有可能只显示实际的HTTP请求?

我发现了一些方法,其中大部分都涉及grep ping GET\|POST ,但删除了IP,这主要是我关心的。

编辑:

  • 我没有使用其他任何比tcp +标准的linux和bash命令(因此为什么我只限于tcpdump和grep / strings / awk / sed
  • 将包括filtertcp[13] & 2!=0'帮助,据我所知,只会显示最初的SYN?

如果你只是限于本地工具Id认为你有Perl可用。 也许你可以使用这个Perl脚本。 叫chaosreader

否则你可以捕获stream量,并用另一个系统上的perl脚本parsing它

总之,是的。 使用httpry (和这里 )。 它是开源的,基于libpcap ,非常接近你所需要的,所以只需要很less的调整。

你可以使用wiresharks tshark控制台捕获工具这里有一些捕获的例子,具体是捕获只是HTTP获取

个人ID使用从这里find的dsniff工具urlsnarf

(请注意这些工具中的任何一个,尽pipe只有http … https将被保护,除非你正在做一些中间解密的人,你仍然可以看到客户正在交谈的主机,但不是他们正在访问的完整url)

你可能也想看看一个名为ntop的工具,它提供了非常精细的stream量报告function