Можно ли перенаправить / перенаправить консольное приложение через netcat, чтобы его можно было использовать удаленно?

10

Можно ли «труба» экземпляр консольного приложения через Netcat, так Netcat прослушивает для нового соединения и перенаправляет stdinи stdoutчерез сетевое соединение.

jammmie999
источник
да, но это может быть один вкладыш, это нормально, трубы так. Я не знаю, можете ли вы сказать nc и pipe к уже запущенному экземпляру по pid. Вы можете подключить nc к ip и направить его к nc, который прослушивает, и направить его к nc, который слушает и т. д., и передать это nc ip.
Барлоп
Я изменил заголовок, потому что то, что вы упомянули, больше похоже на перенаправление ввода / вывода , чем на использование канала (который имеет дело только с перемещением вывода одного процесса на вход другого).
Прорыв
@ Как это отличается от труб? поскольку он говорит о перенаправлении ввода-вывода, а не о файлах, то чем он отличается от конвейера?
Бароп
@barlop Перенаправление ввода / вывода ( <или >) значительно отличается от piping ( |), хотя иногда вы можете выполнить эквивалентную операцию с сочетанием обоих. Опять же, с помощью перенаправления ввода / вывода вы можете изменить расположение обоих потоков; трубопровод просто перенаправляет стандартный вывод одного процесса на стандартный ввод другого.
Прорыв
@ Прости, посмотри, что я тебе спросил, хотя. > и <, конечно, отличается от конвейера, потому что <и> используют файлы. Но он не говорит о файлах. Я спросил вас: «Как это [перенаправление ввода-вывода] отличается от каналов?
Поскольку

Ответы:

16

Ну, как документировано в Википедии и 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   | program_name >pipe_name

На клиенте:
nc номер_сервера_имя  номер_порта

Пара заметок:

  • В некоторых версиях netcat, -lподразумевает -p, так что вы должны сказать только -lи затем номер порта.
  • Возможно, вы захотите обернуть ваше решение в while trueцикл.
Скотт
источник