13

На порту 5144 прослушивается процесс-демон, который я не могу изменить.

Я хочу использовать netcat для отправки содержимого текстового файла на сервер, но это заставляет netcat повесить терминал, пока я не нажму Ctrl+C:

cat file.txt | nc -u 127.0.0.1 5144

Единственный способ заставить его работать - это запустить nc -u 127.0.0.1 5144 и скопировать / вставить содержимое файла вручную.

Есть идеи?


Также обратите внимание:

  1. cat file.txt | ... приводит к bash: ...: command not found и я могу продолжать использовать терминал
  2. использование nc -u 127.0.0.1 5144 < file.txt приводит к тому же поведению, что и использование | выше

3 ответа3

7

Если вы используете GNU-версию netcat, вы можете использовать флаг -c, чтобы закрыть соединение в EOF.

-c, - закрыть близкое соединение на EOF от stdin

Если вы используете оригинальную версию инструмента, вы можете использовать флаг -q.

-q секунд выйти после EOF на стандартный ввод и задержка секунд

Пример для оригинальной версии:

cat file.txt | nc -u -q 0 127.0.0.1 5144

Я добавил «-q 0» к вашей исходной команде. Это закрывает соединение после отправки файла.

1

Предполагая, что после отправки EOF-соединение будет бездействовать, вы можете использовать опцию -w timeout , которая работает, когда время timeout равно нулю (в отличие от глупой опции -q ...)

cat file.text | nc -u localhost 4300 -w0
0

Если вы переходите с FreeBSD на Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N отключит сетевой сокет после EOF

Windows: nc -l -p 5144 > output.txt

-l прекратит прослушивание при закрытом соединении (в отличие от -L)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .