Построим простой канал в оболочке, который будет собирать следующие 100 ARP-пакетов в сети и определять, какой хост сгенерировал больше пакетов, чем другие хосты того же уровня. Что-то вроде конкурса «Кто пошлет больше пакетов». В прошлую такую проверку я обнаружил, что червями заражены два из пятидесяти компьютеров сети.
Команды, приведенные ниже, должны работать в любой системе UNIX/Linux или другой UNIX-подобной системе. Вам понадобится команда tcpdump и доступ с правами root. Команда which tcpdump сообщит вам, установлена ли команда tcpdump в вашей системе. Проверка пакетов в сети имеет этические аспекты. Выполняйте ее, только если у вас есть разрешение.
Вот команда, получившаяся у меня в итоге (прошу прощения за испорченный сюрприз):
>$ sudo tcpdump — l -n агр | grep 'агр who-has' | \
>head -100 | awk '{ print $NF }' |sort | uniq — с | sort — n
Она такая длинная, что не помещается в одной строке этой книги, поэтому я разбил ее на две строки, а символом переноса служит обратный слэш. Вам не нужно набирать обратный слэш при вводе команды.[7] Не следует и нажимать клавишу Enter в этом месте.
Вывод команды выглядит так:
>tcpdump: verbose output suppressed, use — v or — vv for full protocol decode listening on en0, link-type EN10MB (Ethernet), capture size 96 bytes
> 1 192.168.1.104
> 2 192.168.1.231
> 5 192.168.1.251
> 7 192.168.1.11
> 7 192.168.1.148
> 7 192.168.1.230
> 8 192.168.1.254
>11 192.168.1.56
>21 192.168.1.91
>30 192.168.1.111
>101 packets captured
>3079 packets received by filter
>0 packets dropped by kernel
Не обращайте внимание на две первые и три последние строки. В остальных строках указано количество пакетов и IP-адрес. Этот эксперимент показал, что хост 192.168.1.111 отправил 30 ARP-пакетов, а хост 192.168.104 — только один пакет. Большинство машин редко отправляли пакеты за исследуемый период, но два хоста отправили в 4–6 раз больше пакетов, чем остальные. Это свидетельствовало о проблеме. Быстрое сканирование антивирусной программой — и оба хоста стали как новенькие.
А теперь расскажу, как я строил эту командную строку. Я начал с команды:
>$ sudo tcpdump — l -n arp
Здесь sudo означает, что следующая команда должна быть выполнена с правами пользователя root. Весьма вероятно, что она запросит пароль. Если в вашей среде нет sudo, вы можете воспользоваться аналогичной командой или выполнить эту последовательность от имени пользователя root.[8] Будьте внимательны. Человеку свойственно ошибаться, но настоящий храбрец не боится работать от имени root.
Команда tcpdump прослушивает Ethernet. Флаг -1 нужен, если мы собираемся направить вывод другой программе. Дело в том, что, в отличие от других команд, tcpdump выполняет буферизацию выходных данных для ускорения работы. Однако при направлении вывода в канал нам это не нужно. Флаг — n отключает поиск в DNS для каждого найденного IP-адреса. Параметр arр означает, что команда tcpdump должна отслеживать только ARP-пакеты.
(Если вас беспокоит этическая сторона вопроса, то должен сообщить вам хорошую новость. Если вы отфильтруете все, кроме ARP-пакетов, то на выходе будет очень мало частной информации.)
Выполните эту команду на своем компьютере. Вообще, если вы будете проверять на практике все, о чем здесь прочитаете, вы многому научитесь. Эта команда не удаляет никакие данные. Но должен вас предупредить, что отслеживание пакетов может быть незаконным. Делайте это, только если у вас есть соответствующее разрешение.
Когда я запускаю эту команду, вывод выглядит так:
>$ sudo tcpdump — n -l агр
>tcpdump: verbose output suppressed, use — v or — vv for full protocol decode listening on en0, link-type EN10MB (Ethernet), capture size 96 bytes
>19:10:48,212755 arp who-has 192.168.1.110 (85:70:48:a0:00:10) tell 192.168.1.10
>19:10:48,743185 arp who-has 192.168.1.96 tell 192.168.1.92
>19:10:48,743189 arp reply 192.168.1.2 is-at 00:0e:e7:7a:b2:24 19:10:48.
>743198 arp who-has 192.168.1.96 tell 192.168.1.111
>^C
Чтобы прекратить вывод, я нажимаю клавиши CtrL–C Иначе он будет продолжаться вечно.
Если вы получили сообщение об ошибке доступа, скорее всего, вы запустили команду не как суперпользователь. Команда