14

如何netcat -e使用没有该-e选项的 netcat 版本进行模拟?

我需要远程触发命令。我可以用 netcat 做到这一点 - 没有-e

#!/bin/bash

网猫 -l 8080 ; 我的命令.sh

这可以解决问题,我想根据命令的成功或失败回复客户端(拥有一种类似 REST 的界面)。

我怎么能那样做?

谢谢!

4

2 回答 2

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

然后只需 nc servername 2600 和 ./script.sh

使用 ctrl+c 杀死客户端

于 2011-11-17T02:46:13.003 回答
4

最好的方法是切换到支持它的 netcat 版本。在 Debian/Ubuntu IIRC 上,您应该正确使用 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

高温高压


$ 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)
于 2011-06-07T18:49:52.830 回答