расширяем возможности встроенного в маршрутизатор анализатора пакетов

Прослушивание сети с помощью снифферов (sniffer) стало уже доброй традицией. Наверное, самым распространенным продуктом можно считать сетевой анализатор Ethereal, переименовавшийся в Wireshark. Однако не всегда существует возможность разместить компьютер или ноутбук с установленным ПО непосредственно в том месте, где требуется произвести анализ трафика.

Перехват трафика для его последующего анализа может быть произведен и с помощью встроенного в некоторые маршрутизаторы функционала. Примером такого устройства служит Asus SL1200, о котором и пойдет речь далее. Впрочем, с некоторыми модификациями вы сможете применить описываемую технику к любому другому маршрутизатору, поддерживающему в той или иной форме захват пакетов.

В Asus SL1200 получить доступ к прослушивающему механизму можно только из командной строки (telnet или консольный порт). Сразу хотелось бы отметить, что SL1200 – это не полнофункциональный сниффер, но маршрутизатор, то есть перехват пакетов является побочной функцией.

Для работы с консольным портом маршрутизатора использовалась программа PuTTy версии 0.6. Всю работу будем производить с компьютера, на котором установлена операционная система Windows Vista, поэтому все использованные команды и программы будут Windows-ориентированными.

Функция перехвата сетевых кадров в Asus SL1200 может быть активирована или деактивирована. Смена режимов производится с помощью команды привилегированного режима debug:

SL1200# debug

Help option:

ppp Debug mode for PPPoE/PPP
sniffer Packets sniffer


Стало быть, включаем захват пакетов командой deb s (сокращение от debug sniffer).

Вывод перехваченных пакетов также производится либо в telnet-сессию, либо в консоль. Для просмотра того, что уже было наловлено, служит команда привилегированного режима sho p. В приведенном ниже примере выловлен один пакет, отправленный с WAN-порта маршрутизатора.

SL1200# sho p
disable with signature=feedbeef at position=0
ID = 0, Captured from WAN, Packet size = 590
ff ff ff ff ff ff 00 1a 92 20 61 92 08 00 45 00
02 40 00 09 00 00 40 11 78 a5 00 00 00 00 ff ff
ff ff 00 44 00 43 02 2c 86 3c 01 01 06 00 75 4e
7e 43 00 03 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 1a 92 20 61 92 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 63 82 53 63 35 01 01 39 02 02
24 33 04 ff ff ff ff 37 0e 01 03 06 0c 0f 11 17
1c 1d 1f 21 28 29 2a 0c 07 53 4c 31 32 30 30 00
3c 11 4c 69 6e 75 78 20 32 2e 34 2e 31 38 20 6d
69 70 73 3d 07 01 00 1a 92 20 61 92 ff 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00


Данные, содержащиеся в пакете, скопируем из окна вывода Putty в текстовый файл, назовем его, скажем, one_frame_original.txt. Полученный файл будем обрабатывать таким образом, чтобы его можно было открыть с помощью Wireshark.

Для начала откроем его в текстовом редакторе с возможностью поиска и замены текста, например, в Microsoft Word. Заменим все символы конца абзаца на пробел, чтобы в файле была одна строка, содержащая перехваченные данные, где каждый байт (две шестнадцатеричные цифры) был бы отделен от соседних пар пробелами.

Для дальнейшего преобразования посмотрим, какие еще требования предъявляет утилита text2pcap.exe, поставляемая вместе с Wireshark. Требования описаны в файле text2pcap.html.

Выясняем, что еще необходимо добавить в каждую строку число, соответствующее смещению в файле. Так как сейчас рассматривается только один кадр, то достаточно добавить в начало файла текстовую последовательность "000000". Преобразованные данные будут выглядеть так:

000000 ff ff ff ff ff ff 00 1a 92 20 61 92 08 00 45 00 02 40 00 09 00 00 40 11 78 a5 00 00 00 00 ff ff ff ff 00 44 00 43 02 2c 86 3c 01 01 06 00 75 4e 7e 43 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1a 92 20 61 92 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 82 53 63 35 01 01 39 02 02 24 33 04 ff ff ff ff 37 0e 01 03 06 0c 0f 11 17 1c 1d 1f 21 28 29 2a 0c 07 53 4c 31 32 30 30 00 3c 11 4c 69 6e 75 78 20 32 2e 34 2e 31 38 20 6d 69 70 73 3d 07 01 00 1a 92 20 61 92 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Запишем это все в файлик, назовем который one_frame_edited.txt.

Теперь запустим утилиту text2pcap.exe для преобразования текстового файла в бинарник, понятный Wireshark.

C:\Program Files\Wireshark>text2pcap.exe one_frame_edited.txt one_frame.bin
Input from: one_frame_edited.txt
Output to: one_frame.bin
Wrote packet of 590 bytes at 0
Read 1 potential packets, wrote 1 packets


Итак, файл one_frame.bin для разбора готов, откроем его в Wireshark (см. рис. 1).



Рис. 1.

а если пакетов много?

С одним пакетом разобрались. Но обрабатывать так по одному фрейму очень трудоемко, поэтому попробуем преобразовать сразу несколько Ethernet- кадров. Для начала получим их также из консоли путем чтения log-файла PuTTy (putty_original.log). Уберем из лога начало и конец файла так, чтобы в нем остались только записи о пакетах (putty_edited_lite.log). Вот фрагмент того, что нам нужно получить в результате:

ID = 160, Captured from LAN, Packet size = 1514 00 1a 92 20 61 91 00 a0 c5 b3 4f de 08 00 45 00 05 dc 15 31 21 72 80 01 7b 2a c0 a8 01 02 c0 a8 01 01 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64

<skipped>

69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 ID = 161, Captured from LAN, Packet size = 1514 00 1a 92 20 61 91 00 a0 c5 b3 4f de 08 00 45 00 05 dc 15 31 22 2b 80 01 7a 71 c0 a8 01 02 c0 a8 01 01 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c

<skipped>



Добавим первую пустую строку между пакетами. Теперь необходимо избавиться от строк, содержащих информацию о пакетах (например, ID = 160, Captured from LAN, Packet size = 1514). Сделайте это любым удобным для вас образом :)

Полученный файл откроем в текстовом редакторе. Как вы догадались, нам нужно перед началом каждого пакета выставить «смещение». Я делал так: заменил все удвоенные концы абзацев знаком ручного перевода строки, затем удалил одинарные знаки абзаца, после чего переводы строк заменил знаками абзацев, перед которыми расположены "смещения" (000000), необходимые для утилиты text2pcap.exe. Перед первой строкой смещение вставим вручную. В результате получили файл, полностью готовый к преобразованию в формат tcpdump. Конвертируем его так, как описывалось выше. После преобразования должен появиться bin-файл (у меня он назывался putty_edited.bin), который и требуется открыть в Wireshark.

Все перечисленные процедуры обработки можно выполнить и с помощью скриптов, выполняемых на машине с Windows, но мы решили не перегружать читателя подробностями shell-программирования, тем более что в этом деле, как говорится, на вкус и цвет... :). Скажем так – если вы знаете, какие именно преобразования надо выполнить, вам будет легко как проделать это вручную в текстовом редакторе, так и написать скрипт для автоматизации сего процесса.

Единственная проблема, которая возникает при таком анализе - быстродействие консольного порта. Скорости в 9600 кбит/с явно недостаточно для того, чтобы быстро передать захваченные данные на компьютер. Конечно, эту проблему можно решить с помощью telnet, но опять же встает вопрос об эффективности. Поэтому логичней передавать эти данные на FTP-сервер. Практически каждый маршрутизатор обладает функционалом, позволяющим работать с FTP. Пошаговой инструкции приводить не буду, обратитесь, пожалуйста, к документации на вашу конкретную железку.

Обратите внимание, что если на время передачи захваченных пакетов через telnet или FTP не выключить сниффер, в него попадут и пакеты с пересылаемыми данными. Этого можно избежать, если вручную или скриптом фильтровать/разбирать файл с захваченными пакетами, но, на наш взгляд, это утомительное занятие. Также после "слива" кадров в файл не забудьте почистить буфер сниффера. В SL1200 это делается с помощью консольной команды cle b (clear buffer) привилегированного режима.



Максим Климанов


Сетевые решения. Статья была опубликована в номере 12 за 2007 год в рубрике sysadmin

©1999-2024 Сетевые решения