Answers:
因为该程序有各种版本。
netcat
与POSIX中指定的许多其他标准实用程序不同,没有“标准”描述必须支持的选项。您有netcat
OpenBSD,FreeBSD,GNU netcat等版本。
对于OpenBSD变体,联机帮助页指出:
There is no -c or -e option in this netcat, but you still can execute a
command after connection being established by redirecting file descriptors.
Be cautious here because opening a port and let anyone connected execute
arbitrary command on your site is DANGEROUS. If you really need to do this,
here is an example:
On ‘server’ side:
$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
On ‘client’ side:
$ nc host.example.com 1234
$ (shell prompt from host.example.com)
By doing this, you create a fifo at /tmp/f and make nc listen at port 1234
of address 127.0.0.1 on ‘server’ side, when a ‘client’ establishes a
connection successfully to that port, /bin/sh gets executed on ‘server’
side and the shell prompt is given to ‘client’ side.
When connection is terminated, nc quits as well. Use -k if you want it keep
listening, but if the command quits this option won't restart it or keep nc
running. Also don't forget to remove the file descriptor once you don't
need it anymore:
$ rm -f /tmp/f
我在某些源中为netcat找到了定义的最新版本也启用了execute命令。通常出于安全原因将其禁用。
但我找到了另一种解决方法