Що ж, як це зафіксовано у Вікіпедії та netcat
документації, є -e
варіант, який змушує її породити ( e xecute) програму після отримання з'єднання, приєднавши сокет до stdin, stdout та stderr процесу. Приклад використання:
nc -l -p
port_number -e
program_name
Приклади зазвичай показують /bin/sh
або bash
використовуються в якості program_name . Використання цієї опції перешкоджає тому, що в основному вона відкриває анонімний портал доступу до вашого комп'ютера. Звичайно, це зменшується за допомогою програми з меншою потужністю, ніж оболонки (тієї, яка не має можливості вийти на оболонку), мінімізуючи ваше використання і зберігаючи її в таємниці. Тим не менш, оригінальні розробники netcat
відчули досить сильно, що ця опція була поганою ідеєю, що вони відключили її за замовчуванням і обумовили її під опцією компіляції "GAPING_SECURITY_HOLE". Про це коротко йдеться в цьому підручнику NetCat та іншій netcat
документації.
Пошук Google привів мене до обговорення цієї проблеми на інших сайтах Stack Exchange: переповнення стека та помилка сервера . Кілька вкладачів запропонували наступну методику робити те ж саме, не використовуючи -e
параметр (тобто у версії, у netcat
якій -e
опція відключена):
На сервері:
mkfifo
pipe_name
nc -l -p
port_number <
pipe_name |
program_name >
pipe_name
На клієнтському:
nc
server_machine_name
PORT_NUMBER
Пара приміток:
- На деяких версіях
netcat
, -l
мається на увазі -p
, тому слід сказати просто, -l
а потім номер порту.
- Можливо, ви захочете загортати рішення в
while true
цикл.