grep
определен для сопоставления, сохранения или отбрасывания строк, поэтому он должен прочитать всю строку перед выполнением сопоставления; это не может выполнить то, что вы хотите.
Сначала вам нужно проверить, выполняет ли команда
это эхо-вывод входных символов один за другим в конвейер. Стандартные программы C (а иногда и другие программы, использующие C stdio) по умолчанию используют строчную буферизацию, когда stdout является «интерактивным устройством», как определено реализацией, но в противном случае полная буферизация, а pipe обычно не определяется как интерактивный. Ваша команда
уже ведет себя необычно на tty, но проверьте, что она по-прежнему ведет себя так на конвейере с помощью команды command | dd bs = 1
.
Если это не сработает, вам понадобится программа, которая устанавливает псевдо-tty (pty) для команды
, например урезанный сценарий
, предложенный Марк Плотник.
Если эхо в канал работает на стороне команды
, все, что вам нужно, это что-то с правой стороны канала, которое не дожидается полной строки. Это может сделать простая программа на C, например:
#include <stdio.h>
int main (void) {
setvbuf (stdout, NULL, _IONBF, 0);
int c;
while( (c = getchar()) != EOF ){
int sel = c != '%';
for( ; c != '\n' && c != EOF; c = getchar() )
if( sel ) putchar (c);
if( sel ) putchar ('\n');
}
}
Или, если у вас есть bash
- а встроенные устройства IMLE, как правило, НЕ используют - попробуйте сценарий, содержащий
IFS=$'\n'
while read -rn1 c; do y=true; [[ "$c" == "%" ]] && y=false;
while ! [[ "$c" == "" ]]; do $y && printf "%c" "$c"; read -rn1 c || exit; done
$y && printf "\n"; done
Для получения деталей сетевых транзакций есть реализация генератора Netflow для FreeBSD или Linux:
НАЗВАНИЕ ng_netflow - реализация NetFlow от Cisco
ОПИСАНИЕ Узел ng_netflow реализует протокол экспорта NetFlow от Cisco на маршрутизаторе под управлением FreeBSD. Узел ng_netflow прослушивает входящий трафик и идентифицирует в нем уникальные потоки. Потоки различаются по конечным точкам IP-адресами, номерами портов TCP/UDP, ToS и входным интерфейсом. Просроченные потоки экспортируются из узла в UDP-датаграммы NetFlow версии 5/9.
Что касается самого NetFlow:
NetFlow - это сетевой протокол, разработанный компанией Cisco для сбора информации об IP-трафике и мониторинга сетевого трафика. трафика и мониторинга сетевого трафика. Анализируя поток данных, можно построить картину потока и объема сетевого трафика.
также rfc 3954 - NetFlow Services Export Version 9
Для хранения данных Netflow вам также понадобится так называемый сервер-коллектор. Это может быть либо Linux, либо FreeBSD. Он не должен быть установлен на самом маршрутизаторе. Одной из таких известных реализаций является nfsen
NfSen - это графический веб-интерфейс для инструментов nfdump netflow.
NfSen позволяет вам:
- Отображать данные netflow: Потоки, пакеты и байты, используя RRD (Round Robin Database).
- Легко перемещаться по данным нетфлоу.
- Обработка данных нетфлоу в течение заданного промежутка времени.
- Создание исторических и непрерывных профилей.
- Устанавливать предупреждения, основанные на различных условиях.
- Написание собственных плагинов для обработки данных netflow на регулярной основе.
Имейте в виду, что, в зависимости от доступной пропускной способности, генерация NetFlows может быть обременительной для CPU. Известной стратегией в некоторых случаях является создание зеркала порта коммутатора маршрутизатора и использование другой машины для этих операций.
После определенного порога пропускной способности, вероятно, имеет смысл приобрести профессиональный маршрутизатор, если генерация NetFlows является обязательным требованием.
В качестве последнего предупреждения, при наличии NAT, NetFlows должны быть захвачены во внутреннем/LAN интерфейсе, так как в противном случае вы потеряете представление о том, кто что делает.
Я использую около 100 ГБ данных за 5-6 месяцев трафика, используя NfSen, собирая данные NetFlow с оборудования Cisco, ваш пробег может отличаться.