⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdconnect.pm

📁 Perl开发的数据采集工具 基于UNIX
💻 PM
字号:
package StdConnect;#################################################################################  @(#) Perl Module: StdConnect##  Copyright(C) 2002-2004 BOCO Inter-Telecom DC Team, All Rights Reserved##  Author(s): JiaXiaoLong##  Creation Date:2002-12-20##  Description: this module handles all kinds of connecting method.#################################################################################use Net::Telnet();use Data::Dumper;use Exporter;use XML::Simple;use DBIs;@ISA=('Exporter');@EXPORT=qw(connect_telnet connect_sie8_socket);local $err_msg;$r_handle_telnet_error=sub {	$err_msg=shift;	print "It is in handle_telnet_error now. \n";	return 1;};$r_handle_socket_error=sub {	$err_msg=shift;	print "It is in handle_socket_error now. \n";	return 1;};$r_handle_loginNE_error=sub{	$err_msg=shift;	print "It is in handle_loginNE_error now. \n";	return $err_msg;};################################################################  Function:connect_telnet##  Input:ref of a hash which contains the information for creating #	 a handle of telnet.This hash has following structure:#	{#		'Nename'=>host_name or host IP address,#		'Username'=>user_name,#		'Password'=>password,#		'timer'=>time_out#	}##  Output:##  Return value:(1, telnet success,$telnet_hdl) success,#		(-1,$err_msg) bad name or passwd,or time out or other fail reasons##  Description:###############################################################sub connect_telnet{	my $pkg=shift;	my $r_input=shift;	my $connect_hdl=shift;        my %input=%$r_input;        my $hostname=$input{'Nename'};        my $username=$input{'Username'};        my $passwd=$input{'Password'};	my $time_out=$input{'timer'};        my $error_hdl = $pkg->{'ErrMessage_hdl'};	if($connect_hdl==0){		$telnet_hdl=new Net::Telnet (Timeout => 1800, Prompt => '/[\$%#>:]\s*$/');	}	else{		$telnet_hdl=$connect_hdl;	}	$err_msg='';	my $pre_errmode=$telnet_hdl->errmode($r_handle_telnet_error);        #------------------        # Set buffer size        #------------------        my $max_buffer=20*1024*1024;        $telnet_hdl->max_buffer_length($max_buffer);		$telnet_hdl->input_log("/tmp/input.log");	$telnet_hdl->dump_log("/tmp/telnet.log");	#---------------	# login host	#---------------	$telnet_hdl->open(Host=>$hostname,Timeout=>$time_out);	$telnet_hdl->login($username, $passwd);	#---------------------------------------	# Change to CSH , this need modify!!	#---------------------------------------	#my @csh = $telnet_hdl->cmd("which csh");	#if ($csh[0] =~ /csh/) {	#	DBIs::Trace("Change to CSH !\n");	#	chomp($csh[0]);	#	DBIs::Trace("CMD: $csh[0]\n");	#	$telnet_hdl->cmd("$csh[0]");	#}	$telnet_hdl->errmode($pre_errmode);		if(!$err_msg){		return (1,"telnet success",$telnet_hdl);	}	if($err_msg=~/bad name or password/){		if ($error_hdl) {			my $log_info = $err_msg." || Host:$hostname || User:$username || Passwd:$passwd";				my $re_code=$pkg->write_dallog($log_info,'','2101');			if ($re_code<0) { 				DBIs::Trace("Can't send Warning Message\n",1);			}			$err_msg=$err_msg."\n\tFile:".__FILE__."\n\tLine:".__LINE__."\n";		}		DBIs::Trace("telnet connect bad name or password error\n",1,1030201,$pkg->{'task_id'});		return(-1,$err_msg);	}	if($err_msg=~/time\-out/){		if ($error_hdl) {			my $log_info = $err_msg." || Host:$hostname || User:$username || Passwd:$passwd";				my $re_code=$pkg->write_dallog($log_info,'','2102');                       	if ($re_code<0) {                               	DBIs::Trace("Can't send Warning Message\n",1);			}			$err_msg=$err_msg."\n File:".__FILE__."\t Line:".__LINE__."\n";		}		DBIs::Trace("telnet connect timeout\n",1,1030202,$pkg->{'task_id'});		return (-1,$err_msg);	}else{		if ($error_handle) {			my $log_info = $err_msg." || Host:$hostname || User:$username || Passwd:$passwd";			my $re_code=$pkg->write_dallog($log_info,'','2199');			if ($re_code<0) {				DBIs::Trace("Can't send Warning Message\n",1);			}			$err_msg=$err_msg."\n File:".__FILE__."\t Line:".__LINE__."\n";		}		DBIs::Trace("telnet connect error\n",1,1030202,$pkg->{'task_id'});		return (-1,$err_msg);	}		}################################################################  Function:connect_socket##  Input:a ref of a hash which contains information for socket.#	 This hash has following structure:#	 'socket inf'=>{#			IP=>hostname or hostip#			Port=>socket_port#			timer=>time_out#			}##  Output:##  Return value:(1,telnet success,$socket_hdl) success,#		(-1,$err_msg) connect fail,##  Description:###############################################################sub connect_socket{	my $pkg=shift;	my $r_input=shift;        my %input=%$r_input;         my $host=$input{'IP'};	my $port=$input{'Port'}; 	my $time_out=$input{'timer'};	print "host=$host \n";	print "port=$port \n";        my $error_hdl = $pkg->{'ErrMessage_hdl'};	$socket_hdl=new Net::Telnet (Timeout => 1800,Prompt => '/[\$%#>] $/');	$err_msg='';	my $pre_errmode=$socket_hdl->errmode($r_handle_socket_error);	#$socket_hdl->input_log("/tmp/input.log");	$socket_hdl->dump_log("/tmp/socket.log");	$socket_hdl->open(Host => $host, Port => $port,Timeout =>$time_out );	#	print $socket_hdl->get(Timeout=>$time_out),"\n";	if(!$err_msg){		return (1,"socket success",$socket_hdl);}	else{		if ($error_hdl) {			my $log_info = $err_msg." Socket $host $port fail!";			my $re_code=$pkg->write_dallog($log_info,'','2199');                       	if ($re_code<0) {                               	DBIs::Trace("Can't send Warning Message\n",1);                       	}			$err_msg=$err_msg."\n File:".__FILE__."\t Line:".__LINE__."\n";		}		DBIs::Trace("socket connect error\n",1,1030204,$pkg->{'task_id'});		return (-1,"$err_msg");	}}################################################################  Function:connect_loginNE##  Input:1.handle of socket connection.#	 2.ref of a hash of login_step, the hash has following structure:#		{#			1=>$r_step1_inf,#			2=>$r_step2_inf,#			...#			n=>$r_stepn_inf#		}#		where,1,2,...n are login step index.$r_stepi_inf is another#		ref of hash,which has following structrue:#		{#			command=>login command,#			expect=>symbol expected,#			except=> mark of except,#			timer=>time out	#		}#	3.output_record_separator.If we don't assign the value of the #	  output record separator, Telnet module will append '\n' to each#	  message being sent.##  Output:##  Return value:(1,last_step_index,"login NE success",$socket_hdl) success, # 		(-1 ,step_index,err_msg) failure##  Description:This function login the network element step by step.#		For each step, it calls function "login_current_step".#		NOTE: the vaule of 'except' in hash $r_stepi_inf#		shouldn't be null,otherwise,it will be a defect.###############################################################sub connect_loginNE{	my $pkg=shift;	my $socket_hdl=shift;	my $r_loginNE_inf=shift;	my $output_record_separator=shift;	my $last_step_index=1;	#assign the value of output record separator	if(defined $output_record_separator){		$socket_hdl->output_record_separator($output_record_separator);		}	foreach $step_index (sort {$a <=> $b} keys %$r_loginNE_inf){	  my($return_code,$return_msg)=login_current_step($socket_hdl,$r_loginNE_inf->{$step_index});	  $last_step_index=$step_index;	  #failure	  if($return_code==-1){return (-1,$step_index,$return_msg);}	}		#loginNE success	return (1,$last_step_index,"login NE success",$socket_hdl);	}sub login_current_step{	my $socket_hdl=shift;	my $r_loginNE_step_inf=shift;	my $cmd_line=$r_loginNE_step_inf->{'cmd'};	my $expect=$r_loginNE_step_inf->{'expect'};	my $except=$r_loginNE_step_inf->{'except'};	my $time_out=$r_loginNE_step_inf->{'timer'};	if((!$except)and ($except!~'0')){$except='DEFAULT_ERROR';}	if(ref($socket_hdl) ne "Net::Telnet"){		my $err_msg="invalid connect_hdl\n File:".__FILE__."\t Line:".__LINE__."\n";		return (-1,$err_msg);	}	my $pre_errmode=$socket_hdl->errmode($r_handle_loginNE_error);	$err_msg='';		sleep(1);		$socket_hdl->print($cmd_line);#	print "---------------\n";#	print "send: ",$cmd_line,"\n";	my ($cmd_result_msg,$match)=$socket_hdl->waitfor(Match=>"/($expect|$except)/",Timeout=>$time_out);#	print "current expect is $expect.\n";	$socket_hdl->errmode($pre_errmode);#	print "receive: ",$cmd_result_msg.$match,"\n";#	print "err_msg is $err_msg \n";	if($err_msg){		$err_msg=$err_msg."\n File:".__FILE__."\t Line:".__LINE__."\n";		return (-1,$err_msg);	}	else {		if($cmd_result_msg=~/$except/){			$err_msg=$match."\n File:".__FILE__."\t Line:".__LINE__."\n";			return (-1,$err_msg);}		else{			return (1,"success:$cmd_line \n");		}	}}sub connect_sie8_socket {	my $pkg=shift;        my $r_input=shift;        my $connect_hdl=shift;        my %input=%$r_input;        my $host =$input{'Host'};        my $port =$input{'Port'};        my $username=$input{'Username'};        my $passwd=$input{'Password'};        my $time_out=$input{'timer'};	my ($telnet_hdl,$cmd_result_msg,$match);print Dumper(\%input);        if($connect_hdl==0){                $telnet_hdl=new Net::Telnet (Timeout => 1800, Prompt => '/[\$%#>:]\s*$/');        }        else{                $telnet_hdl=$connect_hdl;        }	$telnet_hdl->input_log("/tmp/input.log");        $telnet_hdl->dump_log("/tmp/socket.log");        $telnet_hdl->open(Host => $host, Port => $port,Timeout =>$time_out );print Dumper($telnet_hdl);print "host: $host port: $port \n";print "$username 8\n";$time_out=10;	$telnet_hdl->print("$username");	($cmd_result_msg,$match)=$telnet_hdl->waitfor(Match=>"/PLEASE ENTER CURRENT PASSWORD/",Timeout=>$time_out);	print "$cmd_result_msg"."$match";print "1234..";	($cmd_result_msg,$match)=$telnet_hdl->waitfor(Match=>"/AND OPTIONALLY A NEW ONE SEPARATED BY BLANK/",Timeout=>$time_out);	print "$cmd_result_msg"."$match";	$telnet_hdl->print("$passwd");	my ($cmd_result_msg,$match)=$telnet_hdl->waitfor(Match=>"/SESSION REQUEST ACCEPTED/",Timeout=>$time_out);	print "$cmd_result_msg"."$match";	my ($cmd_result_msg,$match)=$telnet_hdl->waitfor(Match=>"/</",Timeout=>10);	print "$cmd_result_msg"."$match";	return (1,"connect socket success",$telnet_hdl);}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -