Проверьте, установил ли прослушиватель netcat соединение и выполните ли команду локально

Мне нужен способ для запуска прослушивателя netcat из сценария оболочки, и если соединение получено, мне нужно выполнить команду на том же локальном компьютере прослушивателя, и без прерывания процесса / соединения netcat это похоже на параметр -e, но мне нужно запустить Команда локально, сохраняя соединение Netcat работающим

Я действительно не знаю, можно ли это сделать, я имею в виду, что после того, как процесс оболочки разветвил дочерний элемент netcat, может ли он, например, взаимодействовать с выводом nc и выполнить другую команду перед выходом из netcat?

Редактировать: я подумал, что это еще проще сделать на стороне кода C клиента, проверив возвращаемое значение исходного сообщения send(), чтобы определить, успешно ли подключился клиент, если мы получили длину отправленного сообщения

sret = send(sock, message, strlen(message), 0);
if (sret == strlen(message)) // We're Connected
   do something

Спасибо

1 ответ

Это проверит, если начальный nc процесс начал слушать, и он будет отображать каждую полученную строку ввода и затем отправит обратно Received ответ:

rm -f input.txt
touch input.txt

tail -f input.txt | nc -l 5555 > output.txt &

if ! ps -p $! >/dev/null; then
    echo "Netcat didn't start. Exiting..."
    exit 1
fi

tail -f output.txt | while read -r LINE; do
    echo "Received input: $LINE"
    echo "Received" >> input.txt
done

Посмотрите, сможете ли вы приспособить это к вашим потребностям.

Другие вопросы по тегам