in reply to Re^2: Telnet command with more than 1024 chars (updated)
in thread Telnet command with more than 1024 chars

Hello again ElectricCheese,

Why don't you try to get the byte size of the command (145 characters) with Devel::Size or bytes.

By doing this you will now if you are exceeding the maxim transmission size (1,048,576 bytes) see the documentation from the module Net::Telnet for max_buffer_length - maximum size of input buffer.

I am not only suggesting to use ssh because you will avoid all these problems, I am suggesting it because of many many reasons. Read an short article about the comparison Telnet & SSH.

Hope this helps, BR.

Seeking for Perl wisdom...on the process of learning...not there...yet!

Replies are listed 'Best First'.
Re^4: Telnet command with more than 1024 chars (updated)
by ElectricCheese (Initiate) on Jul 25, 2017 at 19:49 UTC

    Hello thanos1983!

    Well, I decided to use a different approach instead of using $t->print and $t->waitfor, I decided to use line continuation character, and I discovered it worked very well! I found this code here and adapted for my needs, on which it fitted well. There says some shells have a limitation of 255 characters line limit.

    sub cmd_unixlong { my ($obj, $cmd) = @_; my ($line, $pos); my $max_tty_line = 254; ## Start a Bourne shell. $obj->cmd(-string => "/usr/bin/env " . "'PS1=<xPROMPTx> ' 'PS2=<xPROMPTx> ' /bin/sh -i", -prompt => '/<xPROMPTx> $/') or return; ## Break-up the one large command line and send as shorter lin +es. $pos = 0; while (1) { $line = substr $cmd, $pos, $max_tty_line; $pos += length $line; last unless $pos < length $cmd; ## Send the line with continuation char. $obj->cmd(-string => "$line\\", -prompt => '/<xPROMPTx> $/') or return; } ## Send the last line and return the output. $obj->cmd("$line ; exit"); } # end sub cmd_unixlong
    I'm still using telnet, so I changed it to something more or less like this:
    sub cmd_telnetlong { my ($obj, $cmd) = @_; my ($line, $pos); my $max_tty_line = 254; ## Break-up the one large command line and send as shorter lin +es. $pos = 0; while (1) { $line = substr $cmd, $pos, $max_tty_line; $pos += length $line; last unless $pos < length $cmd; ## Send the line with continuation char. $obj->cmd(-string => "$line^", -prompt => '/More?/i') or return; } ## Send the last line and return the output. return $obj->cmd("$line ; exit"); } # end sub cmd_unixlong

    As I haven't found anything to solve the line limitation, this workaround served me very well! Thanks all for your time!