Соблюдайте эти строки фильтров BPF в синтаксисе ТСРйитр/Libpcap:Tcpdump BPF синтаксис неоднозначность
1: not host x or host y
2: not (host x or host y)
3: not (host x or y)
4: not host x or y
5: (not host x) or host y
6: (not host x) or y
Это мое мнение, что хозяин г соответствует всем вышеперечисленным (за исключением 6, потому что один имеет недопустимый синтаксис). Моя проблема связана с строкой 4. Программа tcpdump видит, что она эквивалентна 5, но я думаю, что это неинтуитивно и, следовательно, неверно. Строка 5 однозначна, как и линия 3. Однако строка 4 может означать обе вещи, в зависимости от того, как вы смотрите на вещи. Я считаю, что, поскольку вы не можете видеть y отдельно от ключевого слова «хозяин», неправильно обрабатывать строку 4, как строка 5.
Что такое логика синтаксического анализа позади этого? Кто может объяснить, почему 1 == 4 == 5 и почему 2! = 4 и 3! = 4?
http://biot.com/capstats/bpf.html: «Отрицание имеет наивысший приоритет». (1) можно рассматривать как «(не хост x) или (хост y)», по существу. –
Я согласен в этом случае (1), однако, поскольку y не может быть написано отдельно, мой мозг обрабатывает дерево разбора: не хост (x или y), потому что невозможно поставить скобки вокруг «не хост x», потому что это приводят к недопустимому синтаксису. На мой взгляд, вы всегда должны ставить скобки вокруг того, что вы имели в виду, не нарушая синтаксиса. Поэтому 4 больше похоже на 3, а не как 1. – Cheatah