如何记录所有流量的确切长度?

Chr*_*urm 0 linux debian iptables tcpdump

我想处理通过我们的网关服务器(运行 Debian 4.0)的所有数据包。

我的想法是使用tcpdump,但是我有两个问题。
我目前想到的命令是tcpdump -i iface -n -t -q.

  1. 是否保证 tcpdump 会处理所有数据包?如果 CPU 满负荷工作会发生什么?
  2. 输出行的格式是IP ddd.ddd.ddd.ddd.port > ddd.ddd.ddd.ddd.port: tcp 1260. 1260究竟是什么?我怀疑它是以数据包的字节为单位的有效载荷,这正是我需要的,但我不确定。它可能是 TCP 窗口大小。

或者也许有更好的方法来做到这一点?我想到了iptables中的LOG规则,但是tcpdump似乎更容易,我不知道iptables是否可以记录数据包长度。

更新:

它现在在 IpTables 中实现。对每个网段使用单独的链,我有一个深度为 3 的树。

机器软中断负载比较高,尤其是晚上(我们大部分用户都在线的时候),但是到现在还可以接受。

感谢您的输入。

Rya*_*nch 5

  1. tcpdump 不能保证处理所有数据包。有一些缓冲,但是如果通过网络接口的数据包的速度比您的 CPU 通过 tcpdump 运行它们的速度快,内核就会开始丢弃数据包。对 CPU 的需求越高,网络流量率越高,掉线的可能性就越大(不可能具体说明,您必须在您的系统上进行测试以找出掉线阈值的位置)。

  2. 顺便说一句,我不知道。

至于更好的方法,您想要的术语是“流量会计”。这是内置在 IPTables 中的,因此任何现代 Linux 发行版都应该开箱即用地支持它。简而言之,一些简单的“直通”IPTables 规则可以为您实时提供传输的总字节数,用于几乎任何指定的流量类型(按 proto、端口、IP 等细分,或不细分)想。

这里有一个很好的演练,有特定的命令:http : //www.catonmat.net/blog/traffic-accounting-with-iptables

这应该比 tcpdump 更轻量和可靠,因为 Netfilter 完全在内核中处理它,而且内核有数据包长度信息。