我想通过我们的网关服务器(运行Debian 4.0)处理所有数据包的大小。
我的想法是使用tcpdump,但我有两个问题。
我目前正在考虑的命令是tcpdump -i iface -n -t -q 。
IP ddd.ddd.ddd.ddd.port > ddd.ddd.ddd.ddd.port: tcp 1260 。 什么是1260? 我怀疑它是数据包的字节有效负载,这正是我所需要的,但我不确定。 这可能是TCP窗口大小。 或者也许还有更好的方法呢? 我想到了iptables中的LOG规则,但tcpdump似乎更容易,我不知道iptables是否可以logging数据包长度。
现在在IpTables中实现。 为每个网段使用一个单独的链,我有一棵深度为3的树。
该机器具有较高的软中断负载,尤其是在晚上(当我们大多数用户在线时),但是到目前为止,这是可以接受的。
感谢您的input。
tcpdump不保证处理所有的数据包。 有一些缓冲,但是如果通过networking接口的数据包的速率比CPU能够通过tcpdump运行它们的速度快,则内核开始丢弃数据包。 对CPU的需求越高,networking通信速率越高,丢弃的倾向就越高(这是不可能的,你必须在你的系统上进行testing,以确定丢弃阈值在哪里)。
不客气,我不知道。
至于更好的方法,你想要的术语是“交通会计”。 这是内置到IPTables,所以任何现代Linux发行版应该支持它的开箱即用。 简而言之,一些简单的“传递”IPTables规则可以实时传输总字节数,用于几乎任何指定的stream量types(按原始数据,端口,IP等等或不)分类想。
有一个很好的步骤,具体的命令,在这里: http : //www.catonmat.net/blog/traffic-accounting-with-iptables
这应该比tcpdump更加轻量级和可靠,因为Netfilter完全在内核中处理它,而内核无论如何都有数据包长度信息。
完成Ryan B. Lynch的优秀回应:
192.168.2.1.38528 > 192.168.2.25.22: P 1649:2241(592) ack... -e可能很有用,因为它会打印链接级别(第2层)头的特征,包括数据包的长度(至less在以太网上)。 19:12:32.238240 00:1c:23:00:6b:7f > 00:1e:8c:76:29:b6, ethertype IPv4 (0x0800), length 66: 192.168.2.25.22 > 192.168.2.1.58759: . ack 2369... 我认为你应该澄清你的意思是“所有的数据包大小通过我们的网关”。 你只是想要一个总的IPstream量计数器? 像在过去一小时内通过路由器的5678898字节一样。 在这种情况下,你可以设置一些iptables规则并使用它的计数器。 或者你需要看到每个数据包的大小?
如果您遇到繁重的stream量统计,请查看NeTraMet或pmacct项目。