相信现在很多公司或网吧开始考虑双线接入,来实现网络的均衡负载或冗余(备份)线路,保持网络的不间断性。但是如何才能检测某条线路断了呢?有以下几种办法:

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

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

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

上面显示 eth0 的编号是3

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

如果显示 up 表示连接正常,显示 down 表示网络中断了。

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

编译安装:

CODE:
[Copy to clipboard]
# ./configure && make && make install

测试:

CODE:
[Copy to clipboard]
# ethtool eth0
    ....
    Link detected: yes

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

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

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

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

CODE:
[Copy to clipboard]
#!/usr/bin/expect

set target [lindex $argv 0]
set timeout 1
spawn ping -c 1 -s 1 $target

expect {
    " 0% packet loss" {
        exit 0
    }
    timeout {
        exit 1
    }
}

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

CODE:
[Copy to clipboard]
#!/bin/sh

netwatch.exp 192.168.1.1
result1=$?
netwatch.exp 192.168.2.1
result2=$?
if [ "$result1" eq 0 ] && [ "$result2" eq 0 ] ; then

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

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

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

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

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

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

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

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

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>

阅读(755) | 评论(0) | 转发(0) |

0

上一篇:expect的一点资料

下一篇:putty 使用key验证登陆ssh

相关热门文章
  • sprintf&&sscanf用法详解
  • 女性需要这样去口 @交(组图)...
  • 女性需要这样去口 @交(组图)...
  • 女性需要这样去口 @交(组图)...
  • 女性需要这样去口 @交(组图)...
  • linux 常见服务端口
  • 什么是shell
  • linux socket的bug??
  • linux的线程是否受到了保护?...
  • 一个适用于windows和linux的抓...
  • 制作jffs2文件系统
  • make命令详解
  • nagios 进程突然增多一个...
  • 第七章 进程调度
  • ubuntu安装tftp服务器
给主人留下些什么吧!~~
评论热议

实时监测网络是否断线的几种办法(转coolend)相关推荐

  1. 输入一个整数n,统计1-n之间的奇数和。你有几种办法实现?

    此专栏是希望通过各种小练习来增强python的知识运用,会不断更新.有同样需求的小伙伴可以实时关注,一起进步. 你行你上,话不多说,直接上题. 问题: 输入一个整数n,统计1~n之间的奇数和.你有几种 ...

  2. eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样...

    eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样 第一种说法: 还真的找到解决的方法了, ...

  3. WinAPI: SetRect 及初始化矩形的几种办法

    为什么80%的码农都做不了架构师?>>>    本例分别用五种办法初始化了同样的一个矩形, 运行效果图: unit Unit1;interfaceusesWindows, Messa ...

  4. php 怎么防注入,php 防止注入的几种办法

    php教程 防止注入的几种办法 其实原来就是我们需要过滤一些我们常见的关键字和符合如: select,insert,update,delete,and,*,等等 例子: function inject ...

  5. 怎么覆盖默认样式_PPT办公技巧:3种办法快速统一幻灯片中不同形状的显示样式...

    应用场景 下图幻灯片中第一排为插入流程图形状"过程""数据""终止"时的默认样式,默认样式中形状填充色为蓝色,形状内文字为等线18号.如果我 ...

  6. php怎么随机生成二个中文,PHP生成随机字符串的两种办法

    通常情况下,生成一个随机字符串,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度. 本文介绍两种生成随机字符串的办法 ...

  7. linux 性能测试 antutu,除了安兔兔跑分,还有这6种办法能证明手机强弱

    原标题:除了安兔兔跑分,还有这6种办法能证明手机强弱 现在说起手机跑分,已经稀松平常,但早在五年前,很多手机用户根本不知道如何测试手机性能."跑分"这个词汇只会出现在媒体的评测文章 ...

  8. WordPress备份的七种办法

    WordPress备份的七种办法 WordPress备份方法大全 WordPress备份的七种办法 WordPress备份方法大全 备份WordPress的内容有这几种(据不完全统计) 第一种:直接复 ...

  9. a href=#与 a href=javascript:void(0) 的区别 打开新窗口链接的几种办法

    #包含了一个位置信息 默认的锚点是#top 也就是网页的上端 而javascript:void(0)  仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#可是 跳动到了页首 而javas ...

最新文章

  1. 使用IntentService给自己的Android应用写一个文件下载器。
  2. [Python3网络爬虫开发实战] 1.7.1-Charles的安装
  3. CodeBlocks 更改 gui 程序为 命令行
  4. jeesite使用心得(二)
  5. @Entity,@Indexed @XmlRootElement
  6. binwalk 提取bootimg_boot.img的解包与打包
  7. Sublime Text 3 Key
  8. Qt 调用CUDA静态库和动态库生成与配置
  9. Letter Combinations of a Phone Number
  10. Ext2 中如何换行 布局?
  11. Tomcat下载及安装(Windows)
  12. python微信语音转发方法_最简单的微信语音转发方法,保证看一遍就会
  13. 稳定排序与不稳定排序的区别
  14. Windows下定时运行程序
  15. 条件概率公式图解推导
  16. chrome单击打开标贴在当前窗口的新标签页设置
  17. 抖音直播流实时下载附源码
  18. JAVA——JAVA知识点集锦(上)
  19. 韩语学习之——韩语基础入门第二课基本辅音
  20. c/c++编程学习:空指针是什么?

热门文章

  1. 如何入手C语言,怎样去学C语言
  2. 仅作笔记用:Windows 10 继续使用 IE 浏览器(针对23年2月14日的系统更新)
  3. Uncaught TypeError: normalizeKey is not a function
  4. 如何解决IDEA输入中文时输入法候选词框不跟随光标问题
  5. [JAVA]第二篇(内存管理,HashMap内存泄漏解决办法)
  6. centos 安装openvpn
  7. open*vpn 配置DHCP 地址池
  8. 面试官:我不介意你老,但是介意老油条
  9. keepalived脑裂
  10. Saas、Pass和lass