Подтвердить что ты не робот

Эмуляция netcat -e

Как я могу эмулировать netcat -e с версией netcat, у которой нет опции -e?

Мне нужно вызвать команду удаленно. Я могу сделать это с netcat - без -e:

#!/Bin/bash

netcat -l 8080; myCommand.sh

Что бы сделать трюк, , но я хотел бы ответить клиенту в зависимости от успеха или неудачи команды (иметь какой-то REST-подобный интерфейс).

Как я могу это сделать?

Спасибо!

4b9b3361

Ответ 1

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

Затем просто nc servername 2600 и. / script.sh

убить клиента ctrl + c

Ответ 2

Лучший способ - перейти к версии 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, поэтому, если у вас нет разрешений на установку, вы должны иметь возможность просто отказаться от автономной бинарной где-то (файловая система с разрешением 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)