我有一个基于Linux的桥梁。 我想要计算每个通过通过的IP产生的stream量。 换句话说,我想得到这样一个文件:
src_IP dst_IP pkt_size 1.1.1.1 2.2.2.2 12304 3.3.3.3 4.4.4.4 430 ....
有没有一个工具在Linux下做到这一点?
我已经在ulog上进行了一些search,但是“会计守护进程”项目似乎都被放弃了(他们的网页不工作)。 用tcpdump捕获stream量,然后分析转储可能是一个选项,但是我看不到如何从转储中获取数据包大小。
请让我知道是否有办法做到这一点。
在IP报头中,您有一个总长度报头,其中包含“数据报的长度,以字节为单位,包括Internet报头和数据。 (RFC 791)。 如果你只想要一个数据包的有效载荷大小,你需要做总长度减去(IP报头长度+(TCP | UDP)报头长度)。 (IP报头长度在IHL报头中,TCP报头长度在数据偏移报头中)。
用一个基本的tcpdump命令,比如
# tcpdump -s 1500 -Svni eth0 tcp and port 80
我将显示每个TCP数据包如下
IP(tos 0x0,tt153,id 5745,offset 0,flags [DF],proto TCP(6),length 505)
12.66.33.88.53247 > 88.231.98.32.80: Flags [P.], cksum 0x62fd (correct), seq 1193308573:1193309026, ack 2122411067, win 46, options [nop,nop,TS val 122841090 ecr 125780554], length 453
第一行包含IP标题,包括总长度(长度505)。 第二行包含tcp头,包括有效负载长度(长度453),即505-52(52是IP + TCP头的长度)。
如果你想自动执行此操作,可以设置tcpdump将捕获信息存储在pcap文件中,然后用脚本parsingpcap。
但是,如果您想快速完成而不降低性能,则应该查看libnetfilter_queue。 这涉及到C编码,但实际上并不多。 这个想法是你在netfilter中放置了一个钩子来指导你的程序。 从那里你可以parsingip | tcp | udp头文件并计算你的信息,如果你愿意的话,把它放到RRD数据库中,然后在netfilter中重新input交通。
首先我们首先提到一个你可以实时观看这个数据的工具: iftop
其次,我认为有必要提一下,像tcpdump这样的入侵式数据包捕获和分析将会对您的界面和计算资源产生影响。 除非你设置了一个单独的系统来盲目地观察电线上的交通情况,而不用触碰它,比如snort,那么你将会受到打击。 永远不要忘记这一点,否则,你将最终成为一个跛脚的networking,当负载上升时,人们会想知道为什么它会很糟糕!
(编辑:完成我离开的地方)
最后,如果你真的需要一个永久性的日志logging解决scheme,你需要一些分析和logging分组数据的东西。 为此,有很多工具,但最近没有用到。 ngrep曾经是一个很好的方法来做到这一点,但是我也不知道这是否存在。 tcpdstat看起来像它可能是一个选项,虽然这可能会做比你想要的更多。