为啥 ncat -exec 可以与 shell 脚本一起使用,但不能与 perl 脚本一起使用?

Posted

技术标签:

【中文标题】为啥 ncat -exec 可以与 shell 脚本一起使用,但不能与 perl 脚本一起使用?【英文标题】:Why does ncat -exec work with a shell script but not with a perl script?为什么 ncat -exec 可以与 shell 脚本一起使用,但不能与 perl 脚本一起使用? 【发布时间】:2013-07-10 19:16:39 【问题描述】:

我正在尝试编写一个小型硬件模拟器,它从套接字读取输入并将响应写回。我想将 ncat 用于网络部分,将 Perl 用于逻辑。但是当我用 ncat 运行我的 perl 脚本时,它永远不会发送响应。

首先,这显示了我想如何使用 ncat。我将 /bin/cat 用于演示目的,因为它很简单。

启动服务器ncat -l 1234 -keep-open --exec "/bin/cat"

启动客户端ncat 12.34.56.789 1234

这样做会导致 ncat 像我期望的那样回显命令。但是当我尝试在 perl 中编写 cat 并使用它而不是 /bin/cat 时。

#!/usr/bin/perl
while (<>) 
    print $_;

ncat -l 1234 -keep-open --exec "/path/cat.pl"

ncat 从不将响应发送回客户端。即使在命令行中,它也完全符合 /bin/cat 的功能。此外,当我将以下 bash 脚本与 ncat 而不是 /bin/cat 一起使用时,它的工作方式与 /bin/cat 一样。 ncat 像我期望的那样将响应回显给客户端。

#!/bin/bash
while [ true ]
do 
read lin
echo "$lin"
done

我必须做些什么才能让我的 Perl 脚本按我想要的方式工作?

【问题讨论】:

【参考方案1】:

停止标准输出的缓冲(自动刷新)有帮助吗?在 Perl 的 cat 开头添加以下内容:

$| = 1;

如果您的代码在此之前做了任何奇怪的事情,您可以选择在此之前加上 select STDOUT;,但对于您的 3 行测试脚本,不需要它。

【讨论】:

谢谢。这解决了问题。我想我对 Perl 的了解不如我应该了解的多。

以上是关于为啥 ncat -exec 可以与 shell 脚本一起使用,但不能与 perl 脚本一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

shell 命名管道,进程间通信, ncat作http server

Exp2 后门原理与实验 20175124符嘉讯

2018-2019-2 20165307《网络对抗技术》Exp2 后门原理与实践

ncat使用总结

ncat命令使用实例

ncat命令使用实例