Не так давно я писал об инструменте netcat, который по задумке авторов должен был стать сетевой версией утилиты cat, однако ушел далеко вперед своего собрата. Сегодня я хочу рассказать о еще трех утилитах, разработчики которых черпали вдохновение в утилитах UNIX. Представляю вашему вниманию утилиты ngrep и netsed, предназначенные для поиска и замены текстовых элементов внутри проходящих пакетов.
Сетевой grep
Начнем с ngrep. Это сетевой снифер, позволяющий производить поиск внутри пакетов с помощью регулярных выражений. Этакий tcpdump с человеческим лицом, пользоваться которым не труднее, чем стандартным grep, и гораздо проще, чем другими подобными программами. Он поддерживает большинство опций своего локального аналога, а также несколько специальных команд, позволяющих указать прослушиваемый порт, сетевой интерфейс, адрес получателя и прочие сетевые параметры. Основан снифер на легендарной библиотеке pcap и поддерживает протоколы TCP, UDP, ICMP.
Простейший пример использования ngrep будет выглядеть так:
# ngrep execbit.ru port 80
Команда просто выведет на экран заголовки и содержимое всех входящих/исходящих пакетов, адресованных execbit.ru. Более сложный пример может выглядеть так:
# ngrep -i 'rcpt to|mail from' -d any tcp port smtp
Это прослушка SMTP-протокола с вычлением ключевых сообщений (если не понятно - изучаем протокол SMTP).
Утилита предельно проста в использовании: указать маску и нужный порт обычно достаточно, чтобы найти то, что хочешь. Будут полезными так же флаги -t для вывода времени прихода/отправки для каждого пакета и -W byline, принуждающий ngrep распечатывать содержимое пакетов по одному на строку.
Потоковый редактор для сетевых пакетов
Утилита ngrep позволяет искать нужные строки в пакетов, а для их изменения можно использовать netsed, представляющую собой простейший прокси-сервер, который не имеет конфигурационного файла и предназначен скорее для тестирования, нежели для постоянного использования.
Как и ngrep, netsed довольно просто использовать. Например, для того, чтобы протестировать SMTP-сервер на предмет правильно обработки писем из разных источников мы можем применить следующий трюк. Берем любой SMTP-клиент, настраиваем его на на localhost и указываем в качестве порта сервера 2525 и выполняем следующую команду:
$ netsed tcp 2525 IP-SMTP-сервера 25 s/vasya@host.com/boris@host.com
Так будет поднят SMTP-прокси, единственной задачей которого будет передача пакетов SMTP-серверу с заменой всех строк vasya@host.com на boris@host.com.
PS Также можно есть довольно удобная утилита nettop, показывающая все самые прожорливые до трафика приложения.
PPS Установить все это добро проще простого:
$ sudo apt-get install ngrep netsed nettop