Универсальные правила являются мощным и гибким механизмом создания
фильтров с помощью булевой логики. Требуются лишь элементарные
знания математики и логики; синтаксис правил несложен для
понимания.
Обзор
Чтобы создать новое правило, задайте ему произвольное имя в
поле
Имя,
выберите действие
(Захват пакетов/Игнорировать пакеты),
в поле
Формула
задайте формулу, пользуясь синтаксисом, описанным ниже, и
нажмите
Добавить/Изменить.
Новое правило будет добавлено в список и немедленно активизировано.
Вы можете задать неограниченное количество правил, но активными из
них буду лишь те, возле которых будет установлена метка. Любое
правило можно включить/выключить, изменяя соответствующий флажок,
либо совсем удалить правило с помощью кнопки
Удалить.
Если активны сразу несколько правил, вы можете выполнить
комбинированное правило, нажав на кнопку
Оценить.
Обратите внимание, что несколько позитивных правил ("Захват")
объединяются логическим оператором OR ("ИЛИ"), т.е. для трех
активных правил RULE1, RULE2, RULE3, результирующим будет правило
RULE1 OR RULE2 OR RULE3. Если вы также используете негативные
правила ("Игнорировать"), то они будут добавлены в результирующее
правило с логическим оператором AND ("И"), так как результирующее
правило с логическим оператором OR ("ИЛИ") не имеет
смысла.
Описание синтаксиса
dir
– Направление пакета. Возможные значения - in (входящий), out
(исходящий) и pass (транзитный).
etherproto
– Протокол Ethernet (13-й и 14-й байты пакета). Допустимыми
значениями являются числа (например,
etherproto=0x0800
соответствует протоколу IP) или известные аббревиатуры
(например,
etherproto=ARP,
что соответствует 0x0806).
ipproto
– Протокол IP. Допустимыми значениями являются числа
(например,
ipproto!=0x06
соответствует протоколу TCP) или известные аббревиатуры
(например,
ipproto=UDP,
что соответствует 0x11).
smac
– MAC источника. Допустимыми значениями являются MAC-адреса
источников в шестнадцатеричном виде (например,
smac=00:00:21:0A:13:0F)
или
алиасы.
dmac
– MAC получателя.
sip
– IP- или IPv6-адрес источника. Допустимыми значениями являются
IP-адреса, записанные через точку (например,
sip=192.168.0.1),
IP-адреса с карт-бланшами (то есть,
sip!=*.*.*.255,
кроме адресов IPv6), сетевые адреса с масками подсетей
(например,
sip=192.168.0.4/255.255.255.240
или
sip=192.168.0.5/28),
диапазоны IP-адресов (то есть,
sip from 192.168.0.15 to 192.168.0.18
или
sip in 192.168.0.15 ... 192.168.0.18)
или
алиасы.
Для работы с адресами IPv6 требуется версия Windows XP или выше, а
также установленный протокол IPv6.
dip
- IP-адрес получателя.
sport
– Номер порта-источника пакета TCP или UDP. Допустимыми значениями
являются числа (например,
sport=80
соответствует HTTP), диапазоны (то есть,
sport from 20 to 50
или
sport in 20..50
для любых портов в диапазоне от 20 до 50) или алиасы,
известные операционной системе (например,
sport=ftp,
что соответствует порту 21). Проверить список алиасов, известных
ОС, можно нажав
Вид => Информация о портах.
dport
– Порт-получатель пакетов TCP или UDP.
flag
– Флаг TCP. Допустимыми значениями являются числа (например, 0x18
соответствует PSH ACK), одна или несколько букв из следующего
списка:
F
(FIN),
S
(SYN),
R
(RST),
P
(PSH),
A
(ACK) и
U
(URG) или ключевое слово has, означающее, что флаг содержит
определенное значение. Например:
flag=0x18,
flag=SA,
flag has F.
size
– Размер пакета. Допустимыми значениями являются числа
(например,
size=1514)
или диапазоны (size
from 64 to 84
или
size in 64..84
для размеров с 64 до 84 байтов).
str
– Содержимое пакета. Задает условие, что пакет должен содержать
определенную строку. Функция имеет три аргумента: образец поиска,
местоположение, чувствительность к регистру. Первый аргумент –
строка, например, 'GET'.
Второй аргумент – число, показывающее смещение строки в пакете.
Счет начинается с нуля – первый байт пакета надо искать, задавая
смещение, равное 0. Чтобы искать строку в любом месте пакета,
задайте смещение равным –1. Третий аргумент устанавливает
чувствительность к регистру и может принимать значения false (без
учета регистра) или true (с учетом регистра). Второй и третий
аргументы необязательны, по умолчанию имеют значения –1 и
false соответственно (искать во всем пакете, без учета регистра).
Примеры:
str('GET',-1,false),
str('GET',-1),
str ('GET').
hex
- Содержимое пакета. Задает условие, что пакет должен содержать
определенный 16-ричный набор. Функция имеет два аргумента:
образец поиска и местоположение. Первый аргумент – 16-ричная
величина, например, 0x4500. Второй аргумент – число, задающее
смещение внутри пакета. Отсчет ведется с нуля, т. е. первый байт
пакета соответствует смещению, равному 0. Чтобы искать во всем
пакете, задайте смещение равным –1. Второй аргумент необязателен,
по умолчанию имеет значение –1 (искать во всем пакете).
Пример:
hex(0x04500, 14)
,
hex(0x4500, 0x0E), hex (0x010101).
bit
- Содержимое пакета. Задает условие, что пакет должен содержать по
указанному смещению определенный бит, имеющий значение 1. В этом
случае функция вернет код возврата
true.
Если же искомый бит имеет значение 0 или находится за пределами
пакета - функция вернет код возврата
false.
Первый аргумент – номер бита в байте, начиная с нуля; допустимые
значения 0-7. Таким образом, если вы ищете восьмой бит, установите
номер равным семи. Второй аргумент – число, обозначающее смещение
байта в пакете, начиная с нуля, то есть, если нужен первый байт
пакета – смещение должно быть равно
0.
Оба аргумента обязательны, например:
bit(0, 14)
,
bit(5, 1).
ToDS,
FromDS,
MoreFrag,
Retry,
Power,
MoreData,
WEP,
Order,
Ftype,
FsubType,
Duration,
FragNum,
SeqNum
- позволяют вам использовать значения полей заголовков пакетов
стандарта 802.11. Имена параметров полностью соответствуют именам
полей заголовков пакетов, описанных в спецификации стандарта
802.11. Допустимыми значениями для полей ToDS, FromDS, MoreFrag,
Retry, Power, MoreData, WEP и Order являются 0 или 1. Для полей
Ftype, FsubType, Duration, FragNum и SeqNum допустимы также другие
числовые значения. Для более подробной информации о смысле этих
полей и допустимых значениях, обратитесь к спецификации стандарта
802.11.
Вышеописанные ключевые слова можно использовать со следующими
операторами:
and
- Конъюнкция, булево И.
or
- Дизъюнкция, булево ИЛИ.
not
- Булево отрицание.
=
- Арифметическое равенство.
!=
- Арифметическое неравенство.
<>
- Арифметическое неравенство.
>
- Арифметическое условие "больше, чем".
<
- Арифметическое условие "меньше, чем".
( )
– Скобки, управляющие порядком вычисления правил.
Числа могут быть в десятичной или шестнадцатеричной системе. Для
указания на шестнадцатеричную нотацию, используйте 0x перед
значением, например, 15 и 0x0F задают одно и тоже
число.
Примеры
Ниже приведены несколько примеров, поясняющих синтаксис правил. К
каждому правилу даны комментарии, отделяемые двойной косой
чертой.
·dir!=pass
// Захватывать только входящие и исходящие пакеты. Транзитные
пакеты игнорируются.
·(smac=00:00:21:0A:13:0E
or
smac=00:00:21:0A:13:0F)
and
etherproto=arp
// Захватывать пакеты ARP, посылаемые двумя компьютерами с MAC
00:00:21:0A:13:0E и 00:00:21:0A:13:0F.
·ipproto=udp
and
dport=137
// Захватывать пакеты UDP/IP, посылаемые в порт 137.
·dport=25
and
str('RCPT
TO:', -1, true)
// Захватывать пакеты TCP/IP или UDP/IP, содержащие строку "RCPT
TO:" и направляемые в порт 25.
·not
(sport>110)
// Захватывать все пакеты, кроме тех, что имеют порт-источник с
номером выше 110.
·(sip=192.168.0.3
and
dip=192.168.0.15)
or (sip=192.168.0.15
and
dip=192.168.0.3)
// Захватывать только IP-пакеты, следующие между двумя хостами,
192.168.0.3 и 192.168.0.15. Все остальные игнорируются.
·((sip
from
192.168.0.3
to
192.168.0.7)
and (dip
=
192.168.1.0/28))
and (flag=PA)
and (size
in 200..600)
// Захватывать TCP-пакеты, размер которых лежит в диапазоне
от 200 до 600 байтов, приходящие с IP-адресов в диапазоне
192.168.0.3 - 192.168.0.7, причем IP-адреса получателей
находятся в сегменте 192.168.1.0/255.255.255.240, и имеющие
TCP-флаг PSH ACK.
·Hex(0x0203,
89)
and (dir<>in)
// Захватывать пакеты, содержащие 0x0203 в смещении 89, при этом
направление пакета - не "входящий".
·not(ftype=0
and
fsubtype=8)
// Игнорировать management-пакеты типа beacon
·ftype=2
and
wep=1
// Перехватывать зашифрованные пакеты данных
·MoreFrag=0
and
FragNum=0
// Перехватывать нефрагментированные пакеты
|