如果我的netcat版本没有-e
选项,我该如何模拟netcat -e
?
我需要远程触发一个命令。我可以使用不带-e
的netcat:
#!/bin/bash
netcat -l 8080 ; myCommand.sh
这样做就可以了,但是,我想根据命令的成功或失败来回复客户端(类似于REST风格的接口)。
那我该怎么做呢?
谢谢!
mkfifo foo
nc -lk 2600 0<foo | /bin/bash 1>foo
然后只需要使用 nc servername 2600 和 ./script.sh 命令
使用 ctrl+c 来关闭客户端
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)