snoop читает все пакеты сегмента Ethernet . С этой целью snoop переводит интерфейс Ethernet в беспорядочный режим (promiscuous mode). В нормальной ситуации интерфейс Ethernet передает протоколам более высокого уровня только пакеты, предназначенные локальному узлу.
В беспорядочном режиме принимаются и передаются все пакеты, что и позволяет snoop просматривать и выбирать для анализа пакеты, исходя из фильтров, определенных пользователем. Фильтры позволяют отбирать пакеты, адресованные определенному узлу, протоколу, порту или произвольному их сочетанию либо исходящие от определенного узла, протокола, порта или произвольного их сочетания. В качестве примера рассмотрим очень простой фильтр snoop. Следующая команда snoop приводит к отображению всех пакетов из обмена узлов crab и rodent:
# snoop host crab and host rodent Using device /dev/le (promiscuous mode) rodent.wrotethebook.com -> crab.wrotethebook.com ICMP Echo request crab.wrotethebook.com -> rodent.wrotethebook.com ICHP Echo reply rodent.wrotethebook.com -> crab.wrotethebook.com RLOGIN C port=1023 crab.wrotethebook.com -> rodent.wrotethebook.com RLOGIN R port=1023 ^C
Фильтр «host crab and host rodent» отбирает только пакеты, исходящие от узла rodent и адресованные узлу crab, и пакеты, исходящие от crab и адресованные rodent. Фильтр состоит из набора примитивов, связанных с ними имен узлов, протоколов и номеров портов. Примитивы изменяются и комбинируются при помощи операторов and, or и not. Фильтр может отсутствовать; в этом случае snoop отображает все пакеты сети.
В табл. 13.2 описаны примитивы фильтров snoop. Существует ряд дополнительных примитивов и варианты примитивов, дублирующие функциональность, но в таблицу включены только наиболее востребованные. Дополнительная информация содержится на страницах руководства (man) по snoop.
Таблица 13.2. Примитивы выражений
Примитив | Отбирает пакеты |
dsthost | net | port destination | Адресованные целевому узлу (host), сети (net) или на порт (port) |
srchost | net | port source | Исходящие от узла (host), сети (net) или порта (port) |
host destination | Исходящие или адресованные узлу (host) |
net destination | Исходящие или адресованные сети |
port destination | Исходящие или адресованные на порт |
ether address | Исходящие или адресованные на адрес Ethernet |
protocol | С типом протокола (icmp, udp или tcp) |
Совместное использование примитивов и операторов and и or позволяет создавать сложные фильтры. Однако фильтры, как правило, просты. Фильтр для выявления обмена между парой узлов - вероятно, наиболее распространенный. Дополнительно можно ограничить полученные данные определенным протоколом, но часто неизвестно, какой из протоколов приводит к сбоям. Если пользователь встречается с проблемой при работе с ftp или telnet, это еще не повод обвинять соответствующие протоколы. Часто анализ следует начинать с перехвата всех пакетов и последующего сужения области поиска лишь после того, как результаты тестов укажут на более конкретную проблему.