Ничего себе. Синтаксис командной строки ngrep действительно is жирный взломать.
Ngrep человек страница говорит:
ngrep {various flags} <match expression> <bpf filter>
без указания, как Ngrep удается сказать, что это часть «выражение соответствует» и то, что часть «BPF фильтра».
Как это определяет, что является:
- принимая первый маркер оболочки после аргументов флага, если он присутствует, как «сшить выражение» и, если есть какие-то маркеры после него, склеивание их всех вместе с пробелами между ними и создания «фильтра bpf»;
- если он находит «фильтр bpf», пытаясь его скомпилировать и:
- если это удастся, используя то, что он нашел как «выражение соответствия» и «фильтр bpf»;
- если терпит неудачу, предполагая, что не было нет «сшить выражение», принимая все лексем после аргументов флага, склейка их вместе, чтобы сделать «BPF фильтр».
Это означает, что если вы ngrep port 22
, он сначала пытается использовать «порт» в качестве «выражения совпадают» и «22», как «BPF фильтр», который терпит неудачу, потому что «22» не является допустимым BPF, а затем предполагает, что там не является «совпадающим выражением» и что «порт 22» является «фильтром bpf», который работает.
Однако, если вы ngrep not port 22
, он сначала пытается использовать «не» как «выражение соответствует» и «порт 22», как «BPF фильтр», который преуспевает, так что вы в конечном итоге с «не» как фильтр, с которым он пытается grepping и «порт 22» в качестве фильтра BPF, он передает libpcap.
К сожалению, Ngrep не имеет никакого способа сказать «нет никакого выражения матча, есть только BPF фильтр», так что вы должны сделать что-то такое, как ngrep "" not port 22
с выражением пустого матча, чтобы он распознавал «не порт 22 "как фильтр BPF.
Так что, если вы хотите увидеть весь трафик кроме для трафика на порт 22, попробуйте
ngrep -d any "" not port 22
-v
влияет на экспрессию матча, НЕ фильтра BPF; это означает, что команда, которую вы дали в вашем вопросе будет соответствовать только пакеты или из порта 22, не пакетов не или из порта 22. Как вы хотите, чтобы выражение пустого матча, чтобы соответствовать всем пакетам, а чем нет пакетов, вы можете оставить флаг -v
.
Что вы подразумеваете под словом «он говорит, что фильтр предназначен для« порта 21 »? Выражение фильтра, которое вы написали, было «port 22», которое должно соответствовать пакетам для порта * 22 *, а не порту * 21 *. –
И что вы подразумеваете под «перевернутым соответствием»? Вы хотите, чтобы все пакеты * другие *, чем те, которые собирались в конкретный порт? –
@GuyHarris Я сделал обновление, он должен был указать порт 22 (не 21). И правильно, я ищу все пакеты, отличные от тех, которые идут на определенный порт. Причина в том, что я не хочу видеть свой SSH-трафик. – hobbes