Ну, как документировано в Википедии и 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
опция отключена):
На сервере:
mkfifo
pipe_name
nc -l -p
port_number <
pipe_name |
program_name >
pipe_name
На клиенте:
nc
номер_сервера_имя
номер_порта
Пара заметок:
- В некоторых версиях
netcat
, -l
подразумевает -p
, так что вы должны сказать только -l
и затем номер порта.
- Возможно, вы захотите обернуть ваше решение в
while true
цикл.