Эмуляция netcat -e

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

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

#!/бин/баш

netcat -l 8080 ; myCommand.sh

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

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

Спасибо!


person user787935    schedule 07.06.2011    source источник
comment
Не могли бы вы использовать для этого именованный канал?   -  person Lynch    schedule 04.07.2011


Ответы (2)


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

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

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

person Jocko    schedule 17.11.2011

Лучше всего переключиться на версию 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, поэтому, если у вас нет разрешений на установку, вы должны иметь возможность просто удалить автономный двоичный файл< /strong> где-нибудь (файловая система с разрешением 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)
person sehe    schedule 07.06.2011
comment
для записи, это не то, что означает «статически связанный». - person Random832; 08.06.2011
comment
Да, я знаю, поэтому я расписал зависимости :) Как бы вы это назвали? «Частично статически связаны», «В основном статически связаны», «Автономный двоичный файл»? Хм..., возможно, последнее было бы не так уж и плохо! Отредактировано, спасибо - person sehe; 08.06.2011
comment
Спасибо, но мне не нравится идея распространять мой маленький скрипт со «случайным двоичным кодом». Кроме того, мне нужно протестировать его на машине разработки (32 бита) и развернуть на промежуточном сервере (64 бита). - person user787935; 08.06.2011