Тайм-менеджмент для системных администраторов (Лимончелли) - страница 159

>$ cat /tmp/x | awk '{ print $HF }'

>192.168.1.110

>192.168.1.10

>192.168.1.92

А почему не $LF? Ну, это было бы слишком просто. А если серьезно, NF означает «number of fields» (количество полей). То есть $NF обозначает NF-e поле слева. Но все это неважно. Просто запомните, что, если вам нужно последнее поле в строке, вы можете добавить $NF в awk:

>$ sudo tcpdump — l -n arp | egrep 'arp who-has' \

>| head -100 | awk '{ print $NF }'

Итак, на выходе мы получаем список IP-адресов. Проверьте это.

(Именно так! Проверьте. Я подожду.)

Теперь мы хотим подсчитать, сколько раз каждый IP-адрес появляется в нашем списке. Есть одна идиома, которую я всегда применяю именно для этой цели:

>sort | uniq — с

Она сортирует данные, а затем выполняет команду uniq, которая исключает повторения из отсортированного списка. (То есть технически она устраняет повторения соседних строк, а сортировка списка гарантирует, что одинаковые строки будут соседствовать.) Флаг — с включает подсчет повторений и вставляет это число в начало каждой строки. Результат выглядит так:

>…

>11 192.168.1.111

> 7 192.168.1.230

>30 192.168.1.254

> 8 192.168.1.56

>21 192.168.1.91

>…

Мы почти у цели! Мы знаем, сколько ARP-пакетов отправил каждый хост. Последнее, что мы должны сделать, — это отсортировать список, чтобы выявить самые «общительные» хосты. Для этого добавляем в конец канала конструкцию | sort — n, которая выполнит сортировку по номеру:

>$ sudo tcpdump — l -n arp | egrep 'arp who-has' | head -100 \

>| awk '{ print $NF }' | sort | uniq — с | sort — n

Выполнив эту команду, мы увидим отсортированный список. Если сеть не очень загружена, выполнение команды займет какое-то время.

В локальной сети из 50 компьютеров, когда было мало пользователей, мне понадобилось около часа. Но это было уже после обнаружения компьютеров со шпионскими программами и их очистки. Перед этим на сбор ста ARP-пакетов я потратил всего несколько минут.

В вашей домашней сети с одним или двумя компьютерами на выполнение команды может уйти несколько дней. Хосты кэшируют информацию, собранную ими с помощью ARP-запросов. Поэтому, поработав некоторое время, компьютер крайне редко отправляет ARP-пакеты,[9] если единственный компьютер, с которым он общается (в локальной сети), — это ваш маршрутизатор.

Зато в сети из ста хостов подозреваемые обнаруживаются достаточно быстро.

Теперь в вашем распоряжении имеется простой инструмент обнаружения атаки червей. Он не заменит тысячедолларовую систему распознавания атак и хорошую антивирусную программу, но, безусловно, поможет вам локализовать проблему, если она возникнет. Главное — он бесплатный, а вы узнали кое-что новое о программировании оболочки.