簡體   English   中英

使用linux @ Net :: Telnet和vt-100終端的Perl問題

[英]Perl Issue with linux @ Net::Telnet and vt-100 terminal

我需要Net的幫助:Telnet。 試圖連接到VT-100終端。 從控制台使用普通的telnet時,它工作正常。 我可以連接並發出命令,但是當我從perl嘗試相同的時候,它連接,但是沒有任何反應 - 我沒有輸出或等待超時或顯示提示不匹配(但是它,因為它總是三個字母和>符號)。 我嘗試了所有可能的方法 - >使用print,cmd,put等方法,但沒有任何成功,並且在那件事上停留了2天。

這是我的示例代碼:

use Net::Telnet ();
my $conn = new Net::Telnet (TelnetMode => 0);

unless ($conn->open(Host => $host, Port => 23))
{
    die "Error opening socket:: ".$conn->errmsg();
}

print "Connected to ".$conn->host().", port ".$conn->port()."\n";

$conn->prompt('/...>/'); # prompt is 014>

my $lines = $conn->put("15\r"); # command 15 to give me the site name
my ($a,$b);
($a,$b) = $conn->waitfor(Match=>'/...>/',Timeout=>100);

$conn->close;

輸入錯誤命令時,通常telnet會顯示錯誤消息和提示,但是從Perl中它什么都不做。 輸入日志為空,輸出日志為空,轉儲日志僅包含以下內容:

0x00000:31 35 0d 0a 15 ..

我不知道還有什么可以嘗試。

以下是正常的telnet會話輸出:

Trying xxx.xxx.xxx.xxx...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.

014>15
15
014 TMR Name

014>^]
telnet> quit
Connection closed.

任何幫助表示贊賞

我只有使用Net::Telnet連接路由器和交換機的經驗,從未遇到過問題。

盡管我沒有使用此類終端的經驗,但仍有一些突出之處。 例如, TelnetMode => 0禁止解釋telnet控制序列。 只有在使用Net::Telnet連接到非telnet服務時才應該這樣做。

其他看起來像我的東西:

  • 默認端口為23,默認的Errmode為“die”,因此這些都是多余的。
  • put函數不返回輸出,需要使用cmd
  • 不要使用$a$b因為它們是perl用於排序的特殊變量。

這可能不起作用,但如果我使用對我來說很好的習語重寫你的腳本,我會這樣寫...

use strict;
use warnings;
use Net::Telnet;

my $prompt = '/.+[:#>] *$/';
my $conn = new Net::Telnet (Prompt => $prompt);

$conn->open($host); # WILL DIE IF CONNECTION FAILS

# AUTHENTICATION GOES HERE IF NEEDED
# $conn->login($username, $password);

print "Connected to ".$conn->host().":".$conn->port()."\n";

my @lines = $conn->cmd("14");
print for @lines;

$conn->close;

我通常正在解析@lines ...如果你只想打印輸出,那么你不需要一個臨時變量,只需print for $conn->cmd("14");

如果系統特別慢,請使用較長的超時初始化連接,即my $conn = new Net::Telnet (Prompt => $prompt, Timeout => 20);

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM