Автоматически закрывать соединение Netcat
Я выполняю следующую команду из скрипта:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Тем не менее, клиент Netcat остается открытым в течение неопределенного времени. Как я могу закрыть соединение после отправки этих данных?
6 ответов
Оба других ответа -c
а также -q
данные являются правильными в правильном контексте, но это может помочь обобщить, почему существует несколько ответов, и дать более общее решение.
Эти разные опции делают одно и то же, но являются разными реализациями netcat:
-c
GNU реализация netcat-q
OpenBSD реализация netcat.-w
(другое?) OpenBSD реализация netcat.
В некоторых версиях требуется, чтобы int указывал количество секунд ожидания до выхода из -q
а также -w
опции. Этот int должен быть > 0
или же >= 0
в зависимости от версии.
Если вы реализуете что-то на нескольких машинах и не уверены, что они используют одну и ту же реализацию netcat, вы можете рассмотреть возможность упаковки вызова netcat с помощью timeout
программа для уничтожения netcat через несколько секунд.
timeout 5 echo '{"hostUp": true}' | netcat localhost 8001
Этот подход немного неуклюж, потому что он накладывает верхний предел на выполнение netcat независимо от того, успешно ли он отправляет данные, но если вы отправляете небольшой объем данных и у вас есть несколько свободных секунд, это должно работать с любой реализацией netcat.
Ты можешь использовать -q
параметр, но это приведет к netcat
Сервер также должен быть закрыт.
$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001
В моем случае копия netcat, которую я использовал на моем Mac, установленном через Homebrew (v 0.7.1), не имела опции -q, но я смог использовать опцию -c, чтобы закрыть STDIN EOF и поместить Вся команда в цикле:
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
На сервере Ubuntu 18.04 мне пришлось использовать следующее: (найдено в справочных страницах)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
Очевидно, что -N
похоже на -q
или же -c
в других дистрибутивах
В Windows это -w 5 (секунды ожидания перед закрытием с мин. 1 секунда)
Пример отправки "hello" в udp на широковещательный адрес в Windows и закрытие через 1 секунду:
echo hello|nc -w 1 -u 10.0.30.255 -p 4000 5000