免费注册 查看新帖 |

Chinaunix

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

use Net::SSH::Expect模块使用的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-29 16:03 |只看该作者 |倒序浏览
使用这个模块,自动登录到路由器上,然后通过路由器的外网IP ping 新浪,然后抓出ping成功的包的数量,如果ping成功数量小于某个值则对路由执行一些动作。大概的脚本如下:
  1. my $ssh = Net::SSH::Expect->new(
  2.                 host => "192.168.1.1",
  3.                 user => "username",
  4.                 password => "password",
  5.                 debug => 1,
  6.                 );

  7. $ssh-> run_ssh() or die "SSH process couldn't start:$!";
  8. $ssh -> login();

  9. my %soure_ip = (
  10.         "eht2" => "11.11.11.11",   #外网端口一的IP
  11.         "eth3" => "22.22.22.22"    #外网端口二的IP
  12. );

  13. foreach my $y (keys %soure_ip){
  14.         my $value;
  15.         my $line;
  16.         print "$y\n";
  17.         sleep(3);
  18.         $ssh->send ("ping -c 10 -a $soure_ip{$y} www.sina.com.cn");  #-c 指定ping包数,-a 指定从哪个ip为源ip,ping新浪。
  19.         print "$soure_ip{$y}\n";
  20.        
  21.     while (defined ($line = $ssh->read_line())){
  22.         print "$line\n";
  23.         #        $value = $1 if ($line =~ /\s+(\d+).*received/);
  24.         #        print $value;
  25.                 }


  26. 这是四次测试中的一次有问题的输出结果:
  27. eth1
  28.   11.11.11.11
  29.   <H3C>ping -c 10 -a 11.11.11.11 www.sina.com.cn^M
  30.    Trying DNS server (202.106.0.20) ^M
  31.     PING libra.sina.com.cn (202.108.33.77): 56  data bytes, press CTRL_C to break^M
  32.       Reply from 202.108.33.77: bytes=56 Sequence=1 ttl=51 time=105 ms^M
  33.       Reply from 202.108.33.77: bytes=56 Sequence=2 ttl=51 time=105 ms^M
  34.       Reply from 202.108.33.77: bytes=56 Sequence=3 ttl=51 time=107 ms^M
  35.      [color=Red]此处没有输出完。。。。[/color]

  36.   eth2
  37. 32 22.22.22.22
  38.   ping -c 10 -a 22.22.22.22 www.sina.com.cn^M
  39.    Trying DNS server (202.106.0.20) ^M
  40.     PING libra.sina.com.cn (202.108.33.98): 56  data bytes, press CTRL_C to break^M
  41.       Reply from 202.108.33.98: bytes=56 Sequence=1 ttl=52 time=10 ms^M
  42.       Reply from 202.108.33.98: bytes=56 Sequence=2 ttl=52 time=9 ms^M
  43.       Reply from 202.108.33.98: bytes=56 Sequence=3 ttl=52 time=10 ms^M
  44.       Reply from 202.108.33.98: bytes=56 Sequence=4 ttl=52 time=10 ms^M
  45.       Reply from 202.108.33.98: bytes=56 Sequence=5 ttl=52 time=9 ms^M
  46.       Reply from 202.108.33.98: bytes=56 Sequence=6 ttl=52 time=9 ms^M
  47.       Reply from 202.108.33.98: bytes=56 Sequence=7 ttl=52 time=9 ms^M
  48.       Reply from 202.108.33.98: bytes=56 Sequence=8 ttl=52 time=9 ms^M
  49.       Reply from 202.108.33.98: bytes=56 Sequence=9 ttl=52 time=8 ms^M
  50.       Reply from 202.108.33.98: bytes=56 Sequence=10 ttl=52 time=8 ms^M
  51.   ^M
  52.     --- libra.sina.com.cn ping statistics ---^M
  53.       10 packet(s) transmitted^M
  54.       10 packet(s) received^M
  55.       0.00% packet loss^M
  56.       round-trip min/avg/max = 8/9/10 ms^M
复制代码
首先可以排除登录不成功造成的不能输出,然后我在路由上直接运行上面的命令20次以上,也没有上面的输出情况,因此我认为是在执行 $ssh->read_line()时出的问题,请问这个问题应该怎么解决?

论坛徽章:
0
2 [报告]
发表于 2010-12-30 10:09 |只看该作者
新的一天,顶上去。。。

论坛徽章:
0
3 [报告]
发表于 2010-12-31 10:47 |只看该作者
回复 2# jidi_78


    给个正确的返回看看

论坛徽章:
0
4 [报告]
发表于 2010-12-31 12:52 |只看该作者
回复 3# bernana


    出现上面的情况后,$value的值为空。现在我的解决方法是,在执行完命令后,在加一个判断$value是否为空,如果为空在从新执行ping命令,知道$value不为空。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP