加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

与Perl的Net :: Telnet连接时,如何修复“未知终端类型”?

发布时间:2020-12-16 06:24:49 所属栏目:大数据 来源:网络整理
导读:我在使用Perl的 Net::Telnet模块连接到SUSE linux机器时遇到了问题. 代码如下所示: my $t = new Net::Telnet (Timeout = 20);$t-open($server);$t-input_log("telnet.log");$t-login($user,$pass);my @lines=$t-cmd($command);print @lines; 日志文件如下所
我在使用Perl的 Net::Telnet模块连接到SUSE linux机器时遇到了问题.
代码如下所示:

my $t = new Net::Telnet (Timeout => 20);
$t->open($server);
$t->input_log("telnet.log");
$t->login($user,$pass);
my @lines=$t->cmd($command);
print @lines;

日志文件如下所示:
????欢迎使用SUSE Linux Enterprise Server 10 SP1(x86_64) – 内核2.6.16.46-0.12-default(5).

vm-sles10u5 login: <myuser>
Password: 
Last login: Thu Feb 25 10:41:07 EST 2010 from <mymachine> on pts/5
tset: unknown terminal type network
Terminal type?

有什么建议?

解决方法

如果使用option_log函数来记录收到并返回的telnet选项.您将看到默认情况下Perl不会将终端类型发送到服务器.由于某些原因,服务器会将终端类型默认为“网络”.

正确的方法是在perl端设置终端类型.

my $termtype = 'vt100'; my $telopt_ttype_ok = '';
my $t = new Net::Telnet (Timeout => 5);

$t->option_callback(&;opt_callback);
$t->option_accept(Do=>Net::Telnet->TELOPT_TTYPE);
$t->suboption_callback(&;subopt_callback);

$t->open($server);
$t->input_log("runRemoteCommand_telnet.log");
$t->login($user,$pass);
$t->cmd($command);

exit 0;

sub opt_callback { 
  my ($obj,$option,$is_remote,$is_enabled,$was_enabled,$buf_position) = @_;
  if ($option == Net::Telnet->TELOPT_TTYPE and $is_enabled and !$is_remote) {
    $telopt_ttype_ok = 1; 
   }
   1;
}

sub subopt_callback {
 my ($obj,$parameters) = @_; 
 my ($ors_old,$otm_old);
 if ($option == Net::Telnet->TELOPT_TTYPE) 
 {
  $ors_old = $obj->output_record_separator('');
  $otm_old = $obj->telnetmode (0);
  $obj->print("xffxfa",pack("CC",0),$termtype,"xffxf0");
  $obj->output_record_separator($ors_old);
  $obj->telnetmode ($otm_old);
 }
 1;
}

Refer to this

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读