Як автоматично закрити з'єднання netcat після надсилання даних?


22

Я виконую наступну команду зі сценарію:

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

Однак клієнт netcat залишається відкритим нескінченно. Як я можу перервати з'єднання після надсилання цих даних?

Відповіді:


17

Як інші відповіді, так -cі -qнаведені відповіді правильні в правильному контексті, але це може допомогти узагальнити, чому існує декілька відповідей і дати більш загальне рішення.

Ці різні параметри роблять те саме, але є різними реалізаціями netcat:

  • -c Впровадження GNU netcat
  • -q Реалізація OpenBSD netcat.
  • -w (інше?) OpenBSD реалізація netcat.

Деякі версії вимагають, щоб int вказав кількість секунд, які потрібно чекати, перш ніж вийти з параметрів -qта -w. Цей вклад повинен бути > 0або >= 0, залежно від версії.

Якщо ви реалізуєте щось на декількох машинах і не впевнені, що вони використовують ту саму реалізацію netcat, ви можете розглянути можливість завершення виклику Netcat timeoutпрограмою, щоб знищити netcat через кілька секунд.

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

Цей підхід є дещо незграбним, оскільки він ставить верхню межу виконання netcat незалежно від того, чи успішно він надсилає дані, але якщо ви надсилаєте невелику кількість даних і маєте кілька секунд, щоб запасти, то це повинно працювати з будь-якою реалізацією netcat.


5

Можна використовувати -qпараметр, але це також призведе netcatдо закриття сервера.

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

3

У моєму випадку копія 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

1

На сервері Ubuntu 18.04 мені довелося використовувати наступне: (знайдено на сторінках man)

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

Очевидно , що -Nаналогічно -qабо -cна інших дистрибутивах

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.