仿真netcat -e

时间:2011-06-07 17:34:41

标签: linux bash system netcat

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

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

  

#!/斌/庆典

     

netcat -l 8080; myCommand.sh

那就可以了,但是我想根据命令的成功或失败来回复客户端(有一种类似REST的界面)。

我怎么能这样做?

谢谢!

2 个答案:

答案 0 :(得分:13)

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

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

使用ctrl + c

终止客户端

答案 1 :(得分:4)

最好的方法是切换到支持它的netcat版本。在Debian / Ubuntu IIRC上你应该使用netcat 传统,而不是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本身,因此如果您没有安装权限,您应该能够删除独立的二进制文件< / strong> somewhere(当然是一个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)