返回Perl脚本实......登陆

Perl脚本实现检测主机心跳信号功能

巴扎黑2017-01-11 13:24:55577

这篇文章主要介绍了Perl脚本实现检测主机心跳信号功能,本文代码也可作为perl串口通信的实例,需要的朋友可以参考下

使用串口通信,在备机端使用如下脚本检测来自主机的心跳信号,一旦未接受次数超过指定记数,备机认为主机DOWN机,自动设置为主机的网络参数,顶替主机提供服务。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

# ! perl -w  

 use strict;

 use Win32 :: SerialPort; 

 my  $port  =  ' COM2 ' # serail port name registried in OS

 my  $count  =  0 ; # count number of heartbeat-receiving failture

 my  $max_count  =  5 ; # max fail count to be tolerated

 my  $interface  =  '  

# ----------------------------------

# 接口 IP 配置    

# ----------------------------------

pushd interface ip  

# "local" 的接口 IP 配置 

set address name="local" source=static addr=192.168.6.185 mask=255.255.255.0

set address name="local" gateway=192.168.6.65 gwmetric=0

set dns name="local" source=static addr=192.168.6.112 register=PRIMARY

add dns name="local" addr=192.168.6.201 index=2

set wins name="local" source=static addr=none 

popd

# 接口 IP 配置结束 

 ' ; # net inetrface config information  

 sub errlog {

   # log the failtrue occuring time    

   open ERR ,  ' >>err.log ' ;

   my  @time  =  localtime ();

   my  $time  =  sprintf " %d " ,  $time [ 5 ] +  1900 )

             .  ' - '

             .  sprintf " %d " ,  $time [ 4 ] +  1 )

             .  ' - '

             .  " $time[3] "

             .  '  '

             .  sprintf " %.2d " ,  $time [ 2 ])

             .  ' : '

             .  sprintf " %.2d " ,  $time [ 1 ])

             .  ' : '

             .  sprintf " %.2d " ,  $time [ 0 ]);

   print ERR $time " \n " ;

   close ERR;

 sub ipchange {

   # change ip addrress    

   open TMP ,  ' >tmp ' ;

   print TMP $interface ;

   close TMP;   

   eval {

     system  ' netsh -f tmp ' ;

     unlink  ' tmp ' ;

  };   

   if ($@) { return  0 ;}

   return  1 ;

 my  $ob  = Win32 :: SerialPort -> new( $port ) or die  " CANNOT OPEN $port " ;

 # open serial port  

 eval {

   # set serial port properties    

   $ob -> baudrate( 9600 );

   $ob -> parity( ' none ' );

   $ob -> databits( 8 );

   $ob -> stopbits( 1 );

   $ob -> handshake( ' none ' );

};   

 if ($@) { die  ' SET FAILED ' ;} 

 $ob -> write_settings or die  " CANNOT WRITE $port DRIVER " ;

 # write to port driver to make it active  

 while ( 1 ) {

   # loop receiving heartbeat from remote machine

  # change ip address after designated count of failture    

   my $length ,  $result ) =  $ob -> read ( 10 );   

   if $result ) {

     $count  =  0 ;

  elsif $count  ==  $max_count ) {

    errlog();

     if (not ipchange()) { print  ' IP CHANGE FAILED ' ; }

     last ;

  }   else {

     $count ++ ;

  }   

   sleep ( 1 );

 undef  $ob ;

更多关于Perl脚本实现检测主机心跳信号功能请关注PHP中文网(www.php.cn)其他文章!

最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送