Назад | Перейти на главную страницу

Как автоматически закрыть соединение netcat после отправки данных?

Я выполняю следующую команду из сценария:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

Однако клиент netcat остается открытым бесконечно. Как я могу закрыть соединение после отправки этих данных?

Оба других ответа -c и -q данные верны в правильном контексте, но это может помочь резюмировать, почему существует несколько ответов, и дать более общее решение.

Эти разные параметры делают одно и то же, но представляют собой разные реализации netcat:

  • -c GNU реализация netcat
  • -q Реализация netcat в OpenBSD.
  • -w (другое?) Реализация netcat в OpenBSD.

В некоторых версиях требуется 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

На Windows это -w 5 (секунды ожидания перед закрытием с мин. 1 сек)

Пример отправки «hello» в udp на широковещательный адрес в Windows и закрытие через 1 секунду:

echo hello|nc -w 1 -u 10.0.30.255 -p 4000 5000

На сервере Ubuntu 18.04 мне пришлось использовать следующее: (находится на страницах руководства)

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001

Очевидно -N похоже на -q или -c на других дистрибутивах