我需要通過telnet協議與設備進行通信。事實證明,它不能處理CR-NUL或CR-LF序列作爲輸出記錄分隔符,只能使用直接CR。否則,它會將CR後面的字符解釋爲屬於下一個命令,這會導致錯誤。因此,我將Output_record_separator設置爲CR,但隨後在通信轉儲(在Dump_Log中)中看到,不僅發送了CR(0x0d),而且還發送了CR NUL(0x0d 0x00)。但我可以發送單個字符:如果我只發送一個LF,只發送一個LF(ox0a)。如何在Net :: Telnet中發送一個CR,而不是Perl中的CR NUL?
這段代碼顯示問題:
#!/usr/bin/env perl
use strict;
use warnings;
use Net::Telnet;
my $host = "192.168.2.223";
my $port = 5000;
my $telnet = new Net::Telnet (
Timeout => 20,
Errmode => 'die',
Port => $port,
Dump_Log => '/tmp/debug',
Output_record_separator => "\015",
Input_record_separator => "\n\r",
Prompt => '/1_.*0/',
Binmode => 1,
);
$telnet->open($host);
$telnet->put("\015");
$telnet->put("\012");
導致此:
tail: /tmp/debug: file truncated
> 0x00000: 0d 00 ..
> 0x00000: 0a .
我怎樣才能讓網::遠程登錄僅發送CR,而無需添加更多的東西?
謝謝你,那是有效的。這是一個更好的解決方案,然後禁用_escape_cr函數(您在上面粘貼),就像我一樣。我錯過了telnetmode開關。 –