Чи можу я передати / перенаправити консольний додаток через netcat, щоб його можна було використовувати віддалено?


10

Чи можна «передавати» екземпляр консольного додатку через netcat, тому netcat прослуховує нове з'єднання і перенаправляє мережеве з'єднання stdinта stdoutчерез нього.


так, але це може бути один вкладиш, це добре, труби так. Я не знаю, чи можете ви повідомити nc та pipe вже запущеному екземпляру за допомогою pid. Ви можете приєднати до ip і передати його на nc, який слухає, і pipe, що на nc, який слухає і т.д., і pipe, що nc на ip.
барлоп

Я змінив заголовок, тому що те, що ви згадуєте, більше нагадує перенаправлення вводу / виводу, а не використання труби (яка стосується лише переміщення виводу одного процесу на вхід іншого).
Прорив

@Breakthrough, чим це відрізняється від труб? як він говорить про перенаправлення IO, а не про файли, то чим він відрізняється від трубопроводів?
барлоп

Перенаправлення введення / виводу @barlop ( <або >) суттєво відрізняється від piping ( |), хоча іноді можна домогтися еквівалентної операції за допомогою поєднання обох. Знову ж таки, перенаправлення вводу / виводу, ви можете змінити розташування обох потоків; трубопровід просто перенаправляє стандартний висновок одного процесу на стандартний вхід іншого.
Прорив

@Перегляньте те, про що я вас просив. > і <звичайно відрізняється від трубопроводу, тому що <і> використовують файли. Але він не говорить про файли. Я запитав у вас, "чим це [перенаправлення IO] відрізняється від труб? Як він говорить про перенаправлення IO, а не про файли, то чим він відрізняється від трубопроводів?"
barlop

Відповіді:


16

Що ж, як це зафіксовано у Вікіпедії та netcatдокументації, є -eваріант, який змушує її породити ( e xecute) програму після отримання з'єднання, приєднавши сокет до stdin, stdout та stderr процесу. Приклад використання:

nc -l -pport_number -eprogram_name

Приклади зазвичай показують /bin/shабо bashвикористовуються в якості program_name . Використання цієї опції перешкоджає тому, що в основному вона відкриває анонімний портал доступу до вашого комп'ютера. Звичайно, це зменшується за допомогою програми з меншою потужністю, ніж оболонки (тієї, яка не має можливості вийти на оболонку), мінімізуючи ваше використання і зберігаючи її в таємниці. Тим не менш, оригінальні розробники 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 server_machine_name  PORT_NUMBER

Пара приміток:

  • На деяких версіях netcat, -lмається на увазі -p, тому слід сказати просто, -lа потім номер порту.
  • Можливо, ви захочете загортати рішення в while trueцикл.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.