Chinaunix

标题: Linux是否可以实现查内网某ip最大流量 [打印本页]

作者: 扫净缘客    时间: 2007-01-17 05:55
标题: Linux是否可以实现查内网某ip最大流量
在linux中,通过什么样的软件或命令,来截获内网中流量输出最大的ip呢?

请大家来探讨这个问题

[ 本帖最后由 扫净缘客 于 2007-1-17 06:20 编辑 ]
作者: skylove    时间: 2007-01-17 11:45
bandwidthd
作者: 5iwww    时间: 2007-01-17 17:28
我一直在用 iptraf  ,效果很好 ,我经常cut掉前3名 , iptraf  AS3以后自带这个包
作者: platinum    时间: 2007-01-17 17:30
同意,iptraf 是好东西,bandwidthd 也确实不错
还可以参考 ntop
作者: Ksharp    时间: 2007-01-17 18:03
顶一下白金老大,我在原来公司一直用ntop,安装方便,使用也很方便
作者: 扫净缘客    时间: 2007-01-18 01:53
各位兄弟的建议都被采纳,iptraf我用过。效果相当滴不错。ntop也不错。不过iptraf如何才能获得内网中某一个ip最大的流量呢?

白金兄弟请赐教

[ 本帖最后由 扫净缘客 于 2007-1-18 03:09 编辑 ]
作者: llzqq    时间: 2007-01-18 08:24
相对NTOP比较直观,配置业不复杂
作者: 扫净缘客    时间: 2007-01-19 15:01
ntop我也用过。确实不错,也感谢这些位兄弟的回复

我现在再想问下,有没有在shell模式下更能直观的检查最大流量?
作者: 独孤九贱    时间: 2007-01-19 21:04
原帖由 platinum 于 2007-1-17 17:30 发表于 4楼  
同意,iptraf 是好东西,bandwidthd 也确实不错
还可以参考 ntop


偶在在FORWARD挂一个Hook ,对来源地址进行统计,内核级的,比起其它旁路级的要性能高很多……
作者: platinum    时间: 2007-01-19 21:12
原帖由 独孤九贱 于 2007-1-19 21:04 发表于 9楼  


偶在在FORWARD挂一个Hook ,对来源地址进行统计,内核级的,比起其它旁路级的要性能高很多……

九贱可否借这个机会教教大家具体实现啊,比如一些小技巧,数据结构、hash 之类的(不知道会不会用到,随便说的
作者: wwlovezz    时间: 2007-01-19 21:59
ntop太占CPU了。。我在as4下试过````
作者: colddawn    时间: 2007-01-19 21:59
iptables的account match结合shell脚本应该就可以吧。
作者: 扫净缘客    时间: 2007-01-21 16:29
是啊。经验之谈,介绍下~~

我看过他们有个人做的服务器。内网最大流量,lan网arp捣乱的,几个命令就能抓出来了。非常的直观
作者: platinum    时间: 2007-01-21 19:05
原帖由 colddawn 于 2007-1-19 21:59 发表于 12楼  
iptables的account match结合shell脚本应该就可以吧。

我对 account 也不是很理解,colddawn 正好给大家介绍一下吧,举个实例讲解一下
作者: 扫净缘客    时间: 2007-01-27 09:02
呵呵.大家一起探讨这个问题吧~~

查阅了下iptables指南,没有什么具体有用的信息。大家继续探讨这个问题

[ 本帖最后由 扫净缘客 于 2007-1-27 09:30 编辑 ]
作者: 独孤九贱    时间: 2007-01-27 18:17
原帖由 platinum 于 2007-1-19 21:12 发表于 10楼  

九贱可否借这个机会教教大家具体实现啊,比如一些小技巧,数据结构、hash 之类的(不知道会不会用到,随便说的


其实很简单,
1、定义一个“内网接口”,凡是从这个口出的数据,就是内网上行,凡是从这个口进的,就是内网上行,
2、定义一个结构,描述主机,可以类似如下定义:
struct host{
    unsigned long  ip;
    unsigned long long rx;
    unsigned long long tx;
};

3、对应提取每个包的来源或目的IP地址,查hash表,加入或累计对应元素就可以了,对于只有一个C网的网段,只要查一次hash表就可以定位到;
4、写一个用户态工具,读取统计值;

这比起许多利用libpcap库的旁路拷贝统计来说,节省了许多开销,我试过在大流量下,仍表现良好
作者: 扫净缘客    时间: 2007-01-31 19:04
其实很简单,
1、定义一个“内网接口”,凡是从这个口出的数据,就是内网上行,凡是从这个口进的,就是内网上行,
2、定义一个结构,描述主机,可以类似如下定义:
struct host{
    unsigned long  ip;
    unsigned long long rx;
    unsigned long long tx;
};

3、对应提取每个包的来源或目的IP地址,查hash表,加入或累计对应元素就可以了,对于只有一个C网的网段,只要查一次hash表就可以定位到;
4、写一个用户态工具,读取统计值;

这比起许多利用libpcap库的旁路拷贝统计来说,节省了许多开销,我试过在大流量下,仍表现良好


不太理解其中的
struct host{
    unsigned long  ip;
    unsigned long long rx;
    unsigned long long tx;
};
类型定义

能详细些吗~~
作者: platinum    时间: 2007-01-31 22:13
struct host{
    unsigned long  ip;              // IP 地址是 32bit,占 4bytes,所以是 unsigned long 形式
    unsigned long long rx;       // 这里用来存放接收到的字节数
    unsigned long long tx;       // 这里用来存放发送出的字节数
};
如果对于 C 网来说,设计一个 254 个元素的结构体数组就可以了,用 IP 做下标,累计计算 IP 的收发字节数
作者: sendqmail    时间: 2007-02-06 10:55
偶还没用过,要多想大牛歌们学习学习啊
作者: colddawn    时间: 2007-02-06 12:47
竟然忽略了这个帖子,我还是觉得是用account target是现有最简单的解决方式
文档见这里:
http://www.intra2net.com/de/produkte/opensource/ipt_account/

以前做流量监控时测试过,效果不错。不过发现netfilter无法对目的地非local的包hook,所以放弃了,最后自己写了个libpcap的程序实现的。如果是在网关环境下监控,使用account无疑是最简捷高效的。
作者: colddawn    时间: 2007-02-06 12:55
另外其实如果论系统自带的工具的话,tcpdump才是最好用的,什么包通过都能一目了然,通过shell截取tcpdump的结果可以实现几乎你要实现的所有要求,当然你本身对于协议栈要熟悉才成,其他的ntop之类的工具也大都是使用libpcap库实现的而已。

这里再推荐一个用户态工具ngrep,同样是使用libpcap的,功能和tcpdump几乎一样,不同的是它可以在任意字段使用正则表达式,这样就可以根据协议栈的任何字段来取你要的统计数据,可以实现高层次一些的监控功能了。
作者: platinum    时间: 2007-02-06 12:56
colddawn 兄,libpcap 好像效率很低啊,网络吞吐量一大的话,网卡进入混杂模式后就狂丢包
作者: colddawn    时间: 2007-02-06 13:03
原帖由 platinum 于 2007-2-6 12:56 发表于 22楼  
colddawn 兄,libpcap 好像效率很低啊,网络吞吐量一大的话,网卡进入混杂模式后就狂丢包


丢包是没办法避免的,但是是有办法有话的,比如对内容不感兴趣只截取包头等等。
而且丢包是随机的,也就是说不丢包时流量大的IP丢包了流量也显然比其他IP大,虽然最后的统计数据可能不准,但对于流量排名这种需求来说还是很精确的。

真的要求流量精确到字节,那还必须是实时操作系统+内核转发才行。

不同环境都有不同的玩法,只要达到自己要求即可。
作者: platinum    时间: 2007-02-06 13:09
感觉还是 netfilter hook 的效率高,非常高,如果只做统计分析的话几乎看不到和载入模块前有什么不同
作者: 独孤九贱    时间: 2007-02-06 14:26
原帖由 platinum 于 2007-2-6 13:09 发表于 24楼  
感觉还是 netfilter hook 的效率高,非常高,如果只做统计分析的话几乎看不到和载入模块前有什么不同


直路肯定要比libpcap这种旁路拷贝效率来得高得多噻……Netfilter效率差我觉得主要差在连接跟踪上,一个数据包穿过Netfilter Frame,得查多少交hash表呀
作者: 扫净缘客    时间: 2007-02-07 15:32
继续关注中。最近没办法测试ipt_ACCOUNT

希望朋友们能测试。得到有个最好的分析网络ip最大流量的方式




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2