netcat с интервалом в миллисекунды

Я пытаюсь использовать netcat для чтения строки в файле каждые несколько миллисекунд и отправки ее на порт.

Пока я знаю из документации netcat, что он может вставлять временной интервал между каждой отправленной строкой:

Это из справочного руководства netcat:

-i сек Интервал задержки для отправленных строк, сканирование портов

Я попробовал следующее, что позволяет мне вставлять интервал времени не менее 1 секунды между каждой отправленной строкой.

nc -q 10 -i 1 -lk 9999 < file_input

Я хотел бы знать, есть ли способ уменьшить этот временной интервал до миллисекунд. Может быть, путем передачи файла в netcat с помощью какой-либо утилиты, позволяющей настроить интервал между каждым чтением в порядке миллисекунд?


person tsar2512    schedule 26.10.2015    source источник


Ответы (1)


Использование режима сна из GNU coreutils позволяет заснуть на доли секунды. Итак, вы можете попробовать:

while read -r line ; do echo "$line"; sleep 0.001; done < "/path/to/file" | nc host port

В каждом цикле переменная «line» содержит одну строку вашего файла, которая отправляется через netcat на хост «host» через порт «port». После отправки одной строки код ждет 0,001 секунды, asf. пока в файле не останется данных для отправки.

См. "Как я могу спать в течение миллисекунды в bash или ksh" для получения дополнительной информации о способности команды sleep ожидать доли секунды.

person Adrian Zaugg    schedule 26.10.2015
comment
Кстати, у вас есть идеи, как я могу также отслеживать, сколько строк было прочитано? то есть, если я могу выводить как на netcat, так и на стандартный вывод - person tsar2512; 30.10.2015
comment
Введите переменную-счетчик и выполните эхо в stderr; stdout уже уходит в netcat. Что-то вроде этого должно работать: COUNT=0; при чтении строки -r; выполнить эхо $line; пусть COUNT+=1; echo $COUNT › спать 0,001; сделано ‹ /путь/к/файлу | хост-порт nc - person Adrian Zaugg; 31.10.2015