ncat v7.6 UDP -k и -w не работают должным образом

Я хочу вставить текст из header.txt в начало каждого файла html.

Чтобы добавить содержимое header.txt ко всем файлам HTML, используйте эту единственную строку:

for i in `find . -name '*.html'` ; do cat /path/to/header.txt > "$i".tmp && cat "$i" >> "$i".tmp && mv "$i".tmp "$i" ; done

Contents of 1.html :

first html file contents

Contents of header .txt :

my header

Содержание 1.html после запуска скрипта:

my header
first html file contents

(Я тестировал его, но на всякий случай сделайте резервную копию ваших файлов.)

{{ 1}}
0
18.06.2018, 20:43
2 ответа

Сообщения об ошибках дают хорошее представление о том, что необходимо сделать


ncat -klu localhost 8000
Ncat: UDP mode does not support the -k or --keep-open options, except with --exec or --sh-exec. QUITTING.

Вы должны предоставить программу прослушивания для использования ncat. Чтобы ввод просто отображался отправителю, вы можете сделать это:

ncat -e /bin/cat -klu localhost 8000

nc -luw 0 localhost 8000
Ncat: Invalid -w timeout (must be greater than 0). QUITTING.

ncне поддерживает нулевое время ожидания, поэтому просто используйте что-то другое

nc -luw 1 localhost 8000

К сожалению, nc не поддерживает время ожидания в доли секунды, но вместо этого вы можете использовать более многофункциональный ncat:

ncat -lu -w 100ms localhost 8000

0
28.01.2020, 04:20

Во-первых, nc, ncat и netcat — технически разные инструменты, которые играют на имени друг друга, но, таким образом, не обязательно предоставляют одни и те же (интероперабельные )функции/параметры.

Во-вторых, неясно, какая версия используется на работе, но в текущих версиях ncat параметр k нельзя использовать для udp. Работает только с tcp. Но ncat будет продолжать слушать даже udp, даже если источник отключится, потому что udp не имеет состояния (, нет процесса подключения ). Но он не будет получать больше пакетов, если только источник повторно не «подключится»/повторно не отправит сообщение с того же исходного порта, который он использовал в первый раз (, потому что последние версии ncat фиксируются на первом исходном порту, который они видят в udp, а затем игнорировать все остальные до тех пор, пока команда /listen не будет перезапущена. К сожалению, это поведение нельзя настроить, если только вы не измените исходный код ). Следовательно, единственным «обходным путем» было бы найти другой инструмент или написать свой собственный код на python. Вот альтернатива, которую я использую и закодировал сам:

#! /usr/bin/python

from socket import socket,AF_INET,SOCK_DGRAM,SO_REUSEADDR,SOL_SOCKET
from time import sleep,ctime
import sys

if len(sys.argv)>2:
    localIP = sys.argv[1]
    localPort = int(sys.argv[2])
else:
    print("Space-separated IP and Port are required")
    exit()

print(f"listening on {localIP}:{localPort}")
bufSize = 1500

sock = socket(family=AF_INET, type=SOCK_DGRAM)
sock.setsockopt(SOL_SOCKET,SO_REUSEADDR, 1)
sock.bind((localIP, localPort))

while True:
    message, ipport = sock.recvfrom(bufSize)
    print(ctime(), f"[{ipport[0]}:{ipport[1]}]",str(message)[2:-1])

Это не самое простое, что может быть, но оно также печатает метку времени, IP-адрес и порт, с которого пришел каждый отдельный пакет. Поместите его в файл с расширением «.py»,и введите его непосредственно как команду для ее выполнения (, предполагая, что у вас правильно настроен python ), и передайте ему IP-адрес и порты для привязки (через пробел ). IP-адрес может быть чем-то вроде «0.0.0.0» или «127.0.0.1» или даже «localhost» для привязки к любому или локальному интерфейсу (без кавычек ). Если вам не нужны временные метки или удаленный IP/порт, не указывайте соответствующие параметры в последней строке функции печати. Например, чтобы получить только сообщение, замените последнюю строку на:

print(str(message)[2:-1])
1
12.11.2021, 13:22

Теги

Похожие вопросы