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

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. 解密NTFS下经EFS加密的文件
  2. Spring学习笔记之Design of DispatcherServlet
  3. php mongo 查询count,[PHP] 使用PHP在mongodb中进行count查询
  4. crawler py
  5. 漂亮大气!小米武汉总部正式开园:从签约到建成使用仅用时两年
  6. c mysql 并发处理_mysql队列中实现并发读的实现方法解析
  7. checkout 撤销修改_撤销修改(第8篇)
  8. wince6-Error: failed PB timebomb check
  9. Vue响应式数据: Observer模块实现 1
  10. java算法知识点_Java知识点梳理——数据结构与算法
  11. 前端程序员 学习书籍推荐
  12. c语言错误码2,平方根2.我做过C语言的一些错误
  13. scope hosting_针对Web开发人员的Cloud Hosting和CDN服务–最佳
  14. Axure之中继器的使用
  15. 美国计算机工程博士年薪排名,年薪排名
  16. $.ajax返回报错,请求ajax报错 返回readyState0
  17. ESP32-C3 学习测试 蓝牙 篇(五、添加 characteristic)
  18. 【python-opencv】灰度图和彩色图的互相转换
  19. 阿里云1+X-云计算开发与运维(单选题)
  20. wi-fi_Google语音正在测试Wi-Fi呼叫,无需呼叫转移

热门文章

  1. 苹果计算机怎么返回上一步操作,iPhone12如何返回上一步 iPhone12返回上一步及关闭程序方法...
  2. 不用电源的“电磁流量计”—超声波GPRS无线远传
  3. Flutter 基础目录结构介绍、入口自定义widget、等相关组件使用
  4. 2008年文兴小学图书室工作计划
  5. 【清风数学建模笔记】第一讲:层次分析法
  6. 马斯克收购 Twitter:把你们的代码都打印出来
  7. More Effective C++之类型转换
  8. 【论文研读】Self-supervised、unsupervised learning (2020最新论文)
  9. 结构体中含有指针如何初始化
  10. 魔兽(1.20E 1.24B 1.24E)作弊内存地址全公开