免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9847 | 回复: 24
打印 上一主题 下一主题

实时监测网络是否断线的几种办法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-20 12:31 |只看该作者 |倒序浏览
相信现在很多公司或网吧开始考虑双线接入,来实现网络的均衡负载或冗余(备份)线路,保持网络的不间断性。但是如何才能检测某条线路断了呢?有以下几种办法:

1. 物理连接中断(比如网线出现问题)

    这个可以通过SNMP来检测(需要现安装 net-snmp 包),如下:


  1.    先查看各网卡的设备描述编号:
  2.    # snmpwalk -v 1 -c public localhost|grep ifDescr
  3.    IF-MIB::ifDescr.1 = STRING: lo
  4.    IF-MIB::ifDescr.2 = STRING: dummy0
  5.    IF-MIB::ifDescr.3 = STRING: eth0
  6.    IF-MIB::ifDescr.4 = STRING: eth1
  7.    IF-MIB::ifDescr.5 = STRING: tunl0
  8.    IF-MIB::ifDescr.6 = STRING: gre

  9.    上面显示 eth0 的编号是3

  10.    查看 eth0 的状态:
  11.    # snmpwalk -v 1 -c public localhost IF-MIB::ifOperStatus.3
  12.    IF-MIB::ifOperStatus.3 = INTEGER: up(1)

  13.    如果显示 up 表示连接正常,显示 down 表示网络中断了。
复制代码


补充:(感谢 孙轩 兄的建议)
   更简单的办法是利用 ethtool 工具,下载地址:<url>http://directory.fsf.org/All_Packages_in_Directory/ethtool.html</url>


编译安装:

  1.   # ./configure && make && make install
复制代码


测试:

  1.   # ethtool eth0
  2.     ....
  3.     Link detected: yes
复制代码

如果最后一行显示 yes 表示连接正常,显示 no 表示网络中断了。

2. 逻辑连接中断(比如网关的线路出了问题等)

   可以通过每10s发送一个小的ping包到网关,看是否有回应,一般网关都是允许ping的。

    这个可以通过一个expect程序(netwatch.exp)来完成,下面这个脚本发送一个字节为1的ping包给网关,并分析ping的输出信息,如果为 0% packet loss,表示正常,以0退出。如果超时(1秒钟),以1退出。

  1. #!/usr/bin/expect

  2. set target [lindex $argv 0]
  3. set timeout 1
  4. spawn ping -c 1 -s 1 $target

  5. expect {
  6.     " 0% packet loss" {
  7.         exit 0
  8.     }
  9.     timeout {
  10.         exit 1
  11.     }
  12. }
复制代码


比如网关1为192.168.1.1,网关2为192.168.2.1,那么要监测这两个网关的话,可以这样:

  1. #!/bin/sh

  2. netwatch.exp 192.168.1.1
  3. result1=$?
  4. netwatch.exp 192.168.2.1
  5. result2=$?
  6. if [ "$result1" eq 0 ] && [ "$result2" eq 0 ] ; then

  7. # 如果上次检测时连接丢失,而此次恢复正常
  8.     if [ -e /var/run/lost-connection ] ; then
  9.        do some recovery action here ...
  10.        rm /var/run/lost-connection
  11.     fi

  12. # 如果网关1不可达
  13. elif [ "$result1" ne 0 ] ; then
  14.    change default route to 192.168.2.1
  15.    do some action here, such as iptables NAT

  16.    # 创建连接丢失标识
  17.    touch /var/run/lost-connection

  18. # 如果网关2不可达
  19. elif [ "$result2" ne 0 ] ; then
  20.    change default route to 192.168.1.1
  21.    do some action here, such as iptables NAT

  22.    # 创建连接丢失标识
  23.    touch /var/run/lost-connection
  24. fi
复制代码


虽然可以通过iptables的MASQUERADE来实现自动切换,但是如果加了策略路由,就不行了。

以上只是个人的想法,希望起到抛砖引玉的作用,如果大家有更好的办法或建议,请不要吝啬提出来哦!

[ 本帖最后由 coolend 于 2005-12-21 11:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-12-20 13:37 |只看该作者
要在用户态来做,一个笨笨的办法以是,重写一个mii-tool中是否断线的代码,然后每隔一段时间检测一次!我就是这样的……

论坛徽章:
0
3 [报告]
发表于 2005-12-20 14:57 |只看该作者
不错,是个好主意,谢谢回复!

但是有的网卡设备不支持 mii-tool 啊,比如我的两块网卡(RTL-8139)好像不行:


  1. # mii-tool
  2. SIOCGMIIPHY on 'eth0' failed: Operation not supported
  3. SIOCGMIIPHY on 'eth1' failed: Invalid argument
  4. no MII interfaces found
复制代码

[ 本帖最后由 coolend 于 2005-12-20 14:59 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2005-12-20 15:38 |只看该作者
原帖由 coolend 于 2005-12-20 14:57 发表
不错,是个好主意,谢谢回复!

但是有的网卡设备不支持 mii-tool 啊,比如我的两块网卡(RTL-8139)好像不行:

[code]
# mii-tool
SIOCGMIIPHY on 'eth0' failed: Operation not supported
SIOCGMIIPHY o ...


不可能喔……况且我又不是说mii-tool,我是说模仿它的方法从内核中读……当然,我觉得这个办法还是笨了点

论坛徽章:
0
5 [报告]
发表于 2005-12-20 15:42 |只看该作者
You can using OpenNMS(not Openview) for network device monitoring.
One specified policy will be created by you.
when some network link or NIC is down, you can get a email.
The OpenNMS will polling your device at regular interval.
So, It's a realtime network monitoring tool for enterprise. www.opennms.org
If you need some help on it, you can touch me.

论坛徽章:
0
6 [报告]
发表于 2005-12-20 15:51 |只看该作者
原帖由 独孤九贱 于 2005-12-20 15:38 发表


不可能喔……况且我又不是说mii-tool,我是说模仿它的方法从内核中读……当然,我觉得这个办法还是笨了点

不过,确实有的网卡不支持 mii-tool,我也遇到过

论坛徽章:
0
7 [报告]
发表于 2005-12-20 16:01 |只看该作者
heartbeat 如何? 不过得2机器多加个网卡直连... 其实原理和一楼的朋友发的第2种方式很象呢

论坛徽章:
0
8 [报告]
发表于 2005-12-20 16:23 |只看该作者
OpenNMS 需要安装 Java、Tomcat之类的东西,不用这么太复杂吧 

[ 本帖最后由 coolend 于 2005-12-20 16:24 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2005-12-20 17:41 |只看该作者
OpenNMS的按照还算可以,比按照apache+php+mysql+tomcat的难度不高,哈哈个人只见!
不过真的是一个非常好的工具,建议大家试验一下,挺好用的。

论坛徽章:
0
10 [报告]
发表于 2005-12-21 09:12 |只看该作者
可以用ethtool eth0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP