模拟netcat的-e选项

14

如果我的netcat版本没有-e选项,我该如何模拟netcat -e?

我需要远程触发一个命令。我可以使用不带-e的netcat:

#!/bin/bash

netcat -l 8080 ; myCommand.sh

这样做就可以了,但是,我想根据命令的成功或失败来回复客户端(类似于REST风格的接口)。

那我该怎么做呢?

谢谢!


2
你可以使用一个命名管道吗? - Lynch
2个回答

14
mkfifo foo
nc -lk 2600 0<foo | /bin/bash 1>foo

然后只需要使用 nc servername 2600 和 ./script.sh 命令

使用 ctrl+c 来关闭客户端


5
最好的方法是切换到支持它的netcat版本。在Debian/Ubuntu中,正确的做法是使用netcat traditional,而不是netcat openbsd
 sudo apt-get install netcat-traditional # netcat-openbsd

您可以明确指定所需的版本:

 nc.traditional server 6767 -e myscript.sh

 nc.openbsd -l 6767

(请注意选项使用上的微妙差别)。如下所示,nc.traditional可以作为独立二进制文件运行,仅依赖于libc和Linux本身,因此如果您没有安装权限,应该能够将独立二进制文件直接放置在某个地方(当然是具有exec权限的文件系统),并像这样运行:

 /home/user/bin/mynetcat server 6767 -e myscript.sh

HTH


$ ldd `which nc.{traditional,openbsd}`

/bin/nc.traditional:
    linux-gate.so.1 =>  (0xb7888000)
    libc.so.6 => /lib/libc.so.6 (0xb7709000)
    /lib/ld-linux.so.2 (0xb7889000)
/bin/nc.openbsd:
    linux-gate.so.1 =>  (0xb77d0000)
    libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb76df000)
    libc.so.6 => /lib/libc.so.6 (0xb7582000)
    libpcre.so.3 => /lib/libpcre.so.3 (0xb754c000)
    /lib/ld-linux.so.2 (0xb77d1000)

记录一下,这不是“静态链接”的意思。 - Random832
是的,我知道,这就是为什么我要列出依赖项的原因 :) 你会如何称呼它?“部分静态链接”,“大部分静态链接”,还是“独立二进制文件”?嗯...,也许后者不那么糟糕!已编辑,谢谢。 - sehe
谢谢,但我不喜欢使用“随机二进制文件”来分发我的小脚本的想法。此外,我需要在开发机器(32位)上进行测试,并在暂存服务器(64位)上部署。 - user787935

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接