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