Можно ли «передать» экземпляр консольного приложения через netcat, чтобы netcat прослушивал новое соединение и перенаправлял stdin и stdout по сетевому соединению.
1 ответ
Что ж, как описано в документации по Википедии и netcat , есть опция -e которая заставляет ее порождать (e xecute) программу при получении соединения, присоединяя сокет к stdin, stdout и stderr процесса. Пример использования:
nc -l -pномер_порта-eимя_программы
Примеры обычно показывают, что /bin/sh или bash используются в качестве имени_программы. Использование этой опции не рекомендуется, так как она в основном открывает портал анонимного доступа без пароля на вашем компьютере. Конечно, это смягчается использованием программы с меньшей мощностью, чем у оболочки (той, которая не имеет возможности сбежать в оболочку), сводя к минимуму использование этой программы и сохраняя ее в секрете. Тем не менее, первоначальные разработчики netcat чувствовали себя достаточно твердо, что эта опция была плохой идеей, что они отключили ее по умолчанию и включили ее в опцию компиляции «GAPING_SECURITY_HOLE». Это кратко упоминается в этом учебном руководстве по NetCat и другой документации по netcat .
Поиск в Google привел меня к обсуждению этой проблемы на других сайтах Stack Exchange: переполнение стека и сбой сервера. Несколько участников предложили следующую технику, чтобы сделать то же самое без использования опции -e (то есть в версии netcat , у которой отключена опция -e ):
На сервере:
mkfifopipe_name
nc -l -pport_number<|>pipe_nameНа клиенте:
ncимя_сервераномер порта
Пара заметок:
- В некоторых версиях
netcat-lподразумевает-p, поэтому вы должны просто-lа затем номер порта. - Возможно, вы захотите обернуть ваше решение в
while trueцикл.
