Просмотр исходного кода

bugfix: tune telnet method for some vendors

rajven 5 лет назад
Родитель
Сommit
0f94557fec
4 измененных файлов с 47 добавлено и 50 удалено
  1. 35 10
      scripts/Rstat/cmd.pm
  2. 8 8
      scripts/Rstat/config.pm
  3. 3 16
      scripts/set_port_descr.pl
  4. 1 16
      scripts/sync_mikrotik.pl

+ 35 - 10
scripts/Rstat/cmd.pm

@@ -24,6 +24,7 @@ log_cmd3
 log_cmd4
 flush_telnet
 run_command
+netdev_set_auth
 netdev_login
 netdev_cmd
 netdev_backup
@@ -252,6 +253,25 @@ return 1;
 
 #---------------------------------------------------------------------------------
 
+sub netdev_set_auth {
+my $device = shift;
+#router
+if ($device->{device_type} eq '2') {
+    #mikrotik
+    if ($device->{vendor_id} eq '9') { $device->{port}=$config_ref{router_port}; }
+    $device->{login}=$config_ref{router_login};
+    $device->{password}=$config_ref{router_password};
+    }
+#switch
+if ($device->{device_type} eq '1') {
+    $device->{login}=$sw_login;
+    $device->{password}=$sw_password;
+    }
+return $device;
+}
+
+#---------------------------------------------------------------------------------
+
 sub netdev_login {
 my $device = shift;
 #skip unknown vendor
@@ -267,7 +287,7 @@ if ($switch_auth{$device->{vendor_id}}{proto} eq 'telnet') {
     #zyxel patch
     if ($device->{vendor_id} eq '4') {
         eval {
-            my $t1 = new Net::Telnet (Timeout => 30, Port => $device->{port}, Max_buffer_length=>10240000, Prompt =>"/$switch_auth{$device->{vendor_id}}{prompt}/");
+            my $t1 = new Net::Telnet (Timeout => 5, Port => $device->{port}, Max_buffer_length=>10240000, Prompt =>"/$switch_auth{$device->{vendor_id}}{prompt}/");
             $t1->open($device->{ip}) or return;
             if (exists $switch_auth{$device->{vendor_id}}{login}) { $t1->waitfor("/$switch_auth{$device->{vendor_id}}{login}/"); }
             $t1->print($device->{login});
@@ -280,8 +300,8 @@ if ($switch_auth{$device->{vendor_id}}{proto} eq 'telnet') {
         }
 
     eval {
-#        $t = new Net::Telnet (Timeout => 30, Port => $device->{port}, Max_buffer_length=>10240000, Prompt =>"/$switch_auth{$device->{vendor_id}}{prompt}/", Dump_Log=>'/tmp/1');
-        $t = new Net::Telnet (Timeout => 30, Port => $device->{port}, Max_buffer_length=>10240000, Prompt =>"/$switch_auth{$device->{vendor_id}}{prompt}/");
+#        $t = new Net::Telnet (Timeout => 10, Port => $device->{port}, Max_buffer_length=>10240000, Prompt =>"/$switch_auth{$device->{vendor_id}}{prompt}/", Dump_Log=>'/tmp/1');
+        $t = new Net::Telnet (Timeout => 10, Port => $device->{port}, Max_buffer_length=>10240000, Prompt =>"/$switch_auth{$device->{vendor_id}}{prompt}/");
         $t->open($device->{ip}) or return;
         if (exists $switch_auth{$device->{vendor_id}}{login}) { $t->waitfor("/$switch_auth{$device->{vendor_id}}{login}/"); }
         if ($device->{vendor_id} eq '9') { $t->print($device->{login}.'+ct400w'); } else { $t->print($device->{login}); }
@@ -644,6 +664,7 @@ quit";
 
 #zyxel
 if ($device->{vendor_id} eq '4') {
+    $telnet_cmd_mode = 1;
     if (!$descr) { $descr = "name "; } else { $descr = "name $descr"; }
 $cmd = "
 conf t
@@ -666,6 +687,7 @@ exit";
 
 #SNR
 if ($device->{vendor_id} eq '6') {
+$telnet_cmd_mode = 1;
     if (!$descr) { $descr = "no description"; } else { $descr = "description $descr"; }
 $cmd = "
 conf t
@@ -677,8 +699,9 @@ exit";
 
 #Dlink
 if ($device->{vendor_id} eq '7') {
+    $telnet_cmd_mode = 1;
     if (!$descr) { $descr = "clear_description"; } else { $descr = "description $descr"; }
-    $cmd = "config ports $port $descr";
+    $cmd = "config ports $port_num $descr";
     }
 
 #allied telesys x210,x610
@@ -717,9 +740,9 @@ exit";
 
 #mikrotik
 if ($device->{vendor_id} eq '9') {
-$cmd = "/interface ethernet
-set [ find default-name=$port ] comment=$descr
-";
+    $telnet_cmd_mode = 4;
+    if (!$descr) { $descr='""'; } else { $descr='"'.$descr.'"'; }
+    $cmd = "/interface ethernet set [ find default-name=$port ] comment=".$descr;
     }
 
 #cisco
@@ -791,6 +814,7 @@ if ($device->{vendor_id} eq '3') {
 
 #zyxel
 if ($device->{vendor_id} eq '4') {
+$telnet_cmd_mode = 1;
 $cmd = "
 conf t
 hostname $device->{device_name}
@@ -804,6 +828,7 @@ if ($device->{vendor_id} eq '5') {
 
 #SNR
 if ($device->{vendor_id} eq '6') {
+$telnet_cmd_mode = 1;
 $cmd = "
 conf t
 hostname $device->{device_name}
@@ -812,6 +837,7 @@ exit";
 
 #Dlink
 if ($device->{vendor_id} eq '7') {
+    $telnet_cmd_mode = 1;
     $cmd = "config hostname $device->{device_name}";
     }
 
@@ -844,9 +870,8 @@ exit";
 
 #mikrotik
 if ($device->{vendor_id} eq '9') {
-$cmd = "/system identity
-set name=$device->{device_name}
-";
+    $telnet_cmd_mode = 4;
+    $cmd = "/system identity set name=$device->{device_name}";
     }
 
 #cisco

+ 8 - 8
scripts/Rstat/config.pm

@@ -256,17 +256,17 @@ our $last_refresh_config = time();
 our %switch_auth = (
 '8'=>{'vendor'=>'Allied Telesis','enable'=>'en','proto'=>'telnet','login'=> '(login|User Name):','password'=>'Password:','prompt'=>qr/(\010\013){0,5}(([-\w]+|[-\w(config)+])\#|[-\w]+\>)/},
 '3'=>{'vendor'=>'Huawei','proto'=>'ssh','enable'=>'system-view','login'=> 'login as:','password'=>'Password: ','prompt'=>qr/(\<.*\>|\[.*\])/},
-'16'=>{'vendor'=>'Cisco','proto'=>'telnet','enable'=>'en','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
-'5'=>{'vendor'=>'Raisecom','proto'=>'telnet','enable'=>'en','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
+'16'=>{'vendor'=>'Cisco','proto'=>'telnet','enable'=>'en','login'=> 'Username:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
+'5'=>{'vendor'=>'Raisecom','proto'=>'telnet','enable'=>'en','login'=> 'Login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
 '6'=>{'vendor'=>'SNR','proto'=>'telnet','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
-'7'=>{'vendor'=>'Dlink','proto'=>'telnet','login'=> 'login:','password'=>'Password:','prompt'=>qr/[-\w]+\#$/},
+'7'=>{'vendor'=>'Dlink','proto'=>'telnet','login'=> 'UserName:','password'=>'PassWord:','prompt'=>qr/[-\w]+\#$/},
 #'15'=>{'vendor'=>'HP','proto'=>'telnet','enable'=>'system-view','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
-'2'=>{'vendor'=>'Eltex','proto'=>'telnet','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
-'17'=>{'vendor'=>'Maipu','proto'=>'telnet','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
-'4'=>{'vendor'=>'Zyxel','proto'=>'telnet','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
+'2'=>{'vendor'=>'Eltex','proto'=>'telnet','login'=> 'User Name:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
+'17'=>{'vendor'=>'Maipu','proto'=>'telnet','login'=> 'login:','password'=>'password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
+'4'=>{'vendor'=>'Zyxel','proto'=>'telnet','login'=> 'User name:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+]|[-\w(config-interface)+])\#/},
 '38'=>{'vendor'=>'Qtech','proto'=>'telnet','enable'=>'en','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
-'9'=>{'vendor'=>'Mikrotik','proto'=>'telnet','login'=> 'Login:','password'=>'Password:','prompt'=>qr/\[(.*)+\@(.*)+\]\s+> $/},
-'39'=>{'vendor'=>'Extreme','proto'=>'telnet','login'=> 'login:','password'=>'Password:','prompt'=>qr/[-\w]+\s\#\s/},
+'9'=>{'vendor'=>'Mikrotik','proto'=>'telnet','login'=> 'Login:','password'=>'Password:','prompt'=>qr/\[[-\w]+\@[-\w]+\]\s+\>/},
+'39'=>{'vendor'=>'Extreme','proto'=>'telnet','login'=> 'login:','password'=>'password:','prompt'=>qr/[-\w]+\s\#\s/},
 );
 
 mkdir $LOG_DIR unless (-d $LOG_DIR);

+ 3 - 16
scripts/set_port_descr.pl

@@ -122,6 +122,8 @@ my $device = $devices{$device_name};
 #skip unknown vendor
 next if (!$switch_auth{$device->{vendor_id}});
 
+#next if ($device->{ip} ne "192.168.32.11");
+
 my $ip = $device->{ip};
 my $community = $device->{community};
 my $snmp_version = $device->{snmp_version};
@@ -131,22 +133,7 @@ print "Device: $device_name IP: $ip community: $community version: $snmp_version
 #get interface names
 my $int = get_interfaces($ip,$community,$snmp_version,0);
 
-#router
-if ($device->{device_type} eq '2') {
-    #mikrotik
-    if ($device->{vendor_id} eq '9') { $device->{port}='60023'; }
-    $device->{login}=$router_login;
-    $device->{password}=$router_password;
-    }
-
-#switch
-if ($device->{device_type} eq '1') {
-    #mikrotik
-    if ($device->{vendor_id} eq '9') { $device->{port}='60023'; }
-    $device->{login}='admin';
-    $device->{password}=$sw_password;
-    }
-
+$device = netdev_set_auth($device);
 my $session = netdev_login($device);
 
 if ($session) {

+ 1 - 16
scripts/sync_mikrotik.pl

@@ -78,24 +78,9 @@ if ($l3->{'interface_type'} eq '1') { push(@wan_int,$l3->{'name'}); }
 
 my @cmd_list=();
 
-#router
-if ($gate->{device_type} eq '2') {
-    #mikrotik
-    if ($gate->{vendor_id} eq '9') { $gate->{port}='60023'; }
-    $gate->{login}=$router_login;
-    $gate->{password}=$router_password;
-    }
-
-#switch
-if ($gate->{device_type} eq '1') {
-    #mikrotik
-    if ($gate->{vendor_id} eq '9') { $gate->{port}='60023'; }
-    $gate->{login}='admin';
-    $gate->{password}=$sw_password;
-    }
+$gate = netdev_set_auth($gate);
 
 my $t = netdev_login($gate);
-log_cmd($t,"/system note set show-at-login=no",1,$t->prompt);
 
 foreach my $int (@lan_int) { #interface dhcp loop
 next if (!$int);