2015-04-27 4 views
0

Мне любопытно, может ли ngrep сделать инвертированное соответствие на основе портов? Я пытался что-то вдоль линий:ngrep - результат перевернутого порта

ngrep -d any -v port 22 
interface: any 
filter: (port 22) and (ip or ip6) 

И хотя он говорит, что фильтр для «порт 22», он не подобрать любой из портов. Попробовал это за пару дней, и не нашел решения. Может ли кто-нибудь, кто знаком с ngrep, сообщить мне, если это выполнимо?

+0

Что вы подразумеваете под словом «он говорит, что фильтр предназначен для« порта 21 »? Выражение фильтра, которое вы написали, было «port 22», которое должно соответствовать пакетам для порта * 22 *, а не порту * 21 *. –

+0

И что вы подразумеваете под «перевернутым соответствием»? Вы хотите, чтобы все пакеты * другие *, чем те, которые собирались в конкретный порт? –

+0

@GuyHarris Я сделал обновление, он должен был указать порт 22 (не 21). И правильно, я ищу все пакеты, отличные от тех, которые идут на определенный порт. Причина в том, что я не хочу видеть свой SSH-трафик. – hobbes

ответ

1

Ничего себе. Синтаксис командной строки 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.

+0

Когда я пытаюсь «-v not port 22», он показывает мне трафик порта 22, который, как я предполагаю, связан с тем, что мы инвертируем инструкцию. Однако, когда я пытаюсь использовать '-v not port 21', я не вижу никакого трафика, включая порт 22. интерфейс: любой фильтр: (порт 21) и (ip или ip6) не соответствуют: не – hobbes

+0

Другой пример: я буду использовать «-d любой -v-порт 22» и получить результаты: «фильтр: (порт 22) и (ip или ip6) ###### ... ######" , но когда я использую порт 21, я получаю «фильтр: (порт 21) и (ip или ip6) ^ Cexit 0 получено, 0 упадено« – hobbes

+0

OK, синтаксис командной строки ngrep нарушен дизайном, поэтому я обновил ответ, чтобы указать, что вам действительно нужно здесь. –

Смежные вопросы