Китаев А.Е. (Kitaev_A_E сбчк mail.ru)
Дальнейшая обработка результата работы программы sniff94
статистической обработки перехваченных пакетов.
Результатом работы sniff94 является текстовый файл формата DOS, название может быть любым. Вот кусок этого файла
16.03.2007 68 192.168.0.1 192.168.0.70 6 TCP 22 1184
16.03.2007 40 192.168.0.70 192.168.0.1 6 TCP 1184 22
16.03.2007 68 192.168.0.1 192.168.0.70 6 TCP 22 1184
16.03.2007 68 192.168.0.1 192.168.0.70 6 TCP 22 1184
Подробнее смотри документ «Sniff-описание.doc».
Размер файла при контроле траффика в течение всего рабочего дня может составлять около 1Гб (за 1 минуту его размер увеличивается на 1Мб). Его нужно перевросить в Windows и установить связь с ним в базе данных MS Access 97.
Дальнейшая обработка происходит с помощью приложения IP2 (проекты IP(n) написаны на C++ Builder 6 ). Для работы этого приложения необходимо в BDE-администраторе настроить «алиас» под названием IP2 на базу данных IP2.mdb (MS Access 97 именно 97!).
Тип алиаса MSACCESS.
В базе данных должна быть таблица T1 с данными о пользователях. Ее поля
K1 счетчик
S1 (текстовый, длина 50) для имени пользователя
S3 (текстовый, длина 15) для IP адреса пользователя.
S1_1 (текстовый, длина 60) комментарий (в данном варианте не используется).
Кроме того в качестве таблицы T2 в базе данных должна быть так называемая «связь с текстовым файлом» - с тем самым, который мы скопировали из Linux (результат работы sniff94).
Для этого в программе Access 97 мы открываем файл базы данных, идем на вкладку «Таблицы». Если там есть таблица или связь T2, то мы удаляем или переименовываем ее.
Далее:
Файл Внешние данные Связь с таблицами.
Тип файлов выбираем «Текстовые файлы». Находим нужный нам файл, импортированный из Linux.
Появляется окошко «Связь с текстовым файлом». Выбираем вариант «С разделителями ». Кнопка «Далее». В следующем окошке вариант «Пробел». Кнопка «Далее». В следующем окошке «зачернено» первое поле в текстовом файле и надо выбрать название соответствующего поля в таблице Access (а также тип поля). Даем полю название D1, тип оставляем «Дата/время». Выделяем следующее поле в текстовом файле (с длинами пакетов). Задаем имя поля в таблице N3, тип оставляем длинное целое. Выделяем следующее поле (с IP-адресами). Имя задаем S_so, тип оставляем «текстовый». Следующее поле (тоже с IP-адресами) S_de, тип также «текстовый». Пробегаясь по всем остальным полям, нужно ставить галочку в чек-боксе «Не импортировать (пропустить поле)». Кстати, Access «находит» в текстовом файле пустые поля между реальными, на них можно не обращать внимание.
Нажимаем кнопку «Готово», потом переименовываем появившуюся в списке таблиц связь в T2.
Входим в эту связь, проверяем, чтоб дата была в поле D1, длина пакета в поле N3, адрес источника S_so, адрес получателя S_de. Если будут еще какие-то пустые поля, это в принципе не страшно.
Внимание: можно не проводит каждый раз эту процедуру. Один раз подготовить «тандем» - файл базы данных IP2.mdb и в нем связь T2, «указывающая» на файл Result.txt. Оба этих файла помещаются в папке C:\Work. И в дальнейшем, когда будет готов другой текстовый файл для обработки (импортированный из Linux), старый файл Result.txt переименовывать или удалять, а новый переименовывать как Result.txt.
Находясь внутри приложения IP2 (и имея файл с перехваченными заголовками пакетов, импортированный из Linux), мы можем узнать
Первая статистика готовится в два этапа. Зайдя по кнопке в соответствующую форму, мы сперва запускаем запрос к базе данных, результатом которого будут IP-адреса в числовой форме (и источника, и получателя). Далее идет обработка адресам получателя сопоставляются фамилии (если введены соответствующие данные в главной форме приложения), а адресам источника текстовые адреса (www.mail.ru и т.д.). Нахождение текстовых Интернет-адресов носит довольно длительный характер и сопровождается запуском nslookup в окошке командной строки для каждой строчки результирующего запроса к базе данных. Никто не говорит, что это оптимальный способ, но на этом этапе ограничимся этим. Мелькание окошек командной строки делает выполнение другой работы на компьютере невозможным, так что эту «задачу» лучше запускать на ночь.
Кроме того на этапе поиска текстовых адресов задействуется файл NS_0001.txt в текущей папке приложения, его содержание обновляется с каждым новым запуском nslookup. Это происходит незаметно для пользователя.
Еще тонкость если некий пользователь заходил на сайт www.mail.ru, то нет гарантии, что используемая приложением команда nslookup выдаст именно www.mail.ru. Одному IP-адресу может соответствовать несколько имен. Но, набрав в броузере тот адрес, что получим через nslookup, мы должны попасть туда же, куда попал и контролируемый нами пользователь, то-есть на тот же самый www.mail.ru.
И в конце мы можем вывести окончательный результат в текстовый файл C:\ResInet.txt.
Получение статистики второго рода происходит аналогично. Только здесь не нужно сопоставлять текстовые адреса Интернета IP-адресам. Окончательный вывод второго отчета в файл C:\ResInetUsers.txt.
Дополнение:
1)Оказалось, что используемая для обработки статистики платформа (а именно база данных MS Access с интерфейсом, написанным на C++ Builder) очень неустойчива к инсталляциям-деинсталляциям различных версий MS Office. Инсталлятор с помощью InstallShield создать не удалось, после экспериментов сбилась работа приложения из проекта IP3. Пришлось остановиться на вариантах, когда заполнение таблицы пользователей интернета происходит с помощью приложения из проекта IP3, а вывод отчетов с помощью одноименного приложения из проекта IP5 (там задействован алиас IP5_ODBC через драйверы ODBC).
2)Как перекачать файл из Linux в Windows? Один из возможных способов это использование smbclient. Пусть на машине с Windows с сетевым именем Eagle (и имеющей IP-адрес 192.168.0.70 ) есть папка Public, на которую разрешен общий доступ, и есть пользователь admin (с паролем). На машине с Linux (где в каталоге /Work лежит интересующий нас файл) производим следующие действия:
smbclient L 192.168.0.70 U admin
Набираем пароль. Показываются разделенные ресурсы на windows-машине. Далее:
smbclient //Eagle/Public I 192.168.0.70 U admin
Опять запрос на пароль, набираем его. Потом (уже в оболочке программы smbclient):
put /Work/RES_29_03.txt result2903.txt
Потом
quit
Все. Файл размером 385 Мб перекачивается по 100-мегабитной сети примерно за 4 минуты.
Кстати, если бы нам нужно было получить файл из Windows (и положить в каталог /Work) , то нужно было бы набрать
get file1 /Work/file1
3) Пример работы: программа следила за траффиком почти весь рабочий день (29 марта 2007 г.). Согласно серверу статистики АДС (провайдера) за этот день было скачано около 1,5Гб. Результирующий текстовый файл оказался около 385 Мб. Выполнение статистических запросов заняло несколько минут. Определение хостов значительно дольше 1 час 10 мин. Файл с отчетом 561 кб.