Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л



Скачать 192.9 Kb.
Дата26.07.2014
Размер192.9 Kb.
ТипКурсовая
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ

ЭЛЕКТРОНИКИ И МАТЕМАТИКИ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

«Разработка IRC-бота с поддержкой основных функций»

Курсовая работа.

На 20 листах.


Преподаватель:



Алешкин Е.Ф.

Студенты группы с-24:



Глаголев В. Л.

Никитин С.Ю.
г. Москва

2007 год.


Содержание

2007 год. 1

Введение 2

Постановка задачи 5

Общие положения: 5

Технические требования: 5

Требования к функционалу. 5

Требования к документации. 6

Порядок контроля и приёмки. 6

Дополнительные требования. 7

Средства разработки и отладки 7

Анализ вариантов решения 8

Описание выбранного метода решения 9

Описание алгоритмов и программной реализации 10

Файловая иерархия: 10

Инициализация: 12

Запуск: 13

Подключение к серверам: 15

Получение сообщения с cервера: 16

Получение страны по её коду: 17

Парсинг сообщений: 18

Результаты проектирования 20

Список ресурсов 22




Введение


В последнее время сильно возросла роль компьютерных сетей в жизни современного общества. В них создаются все условия для хранения и обмена информацией. В связи с тем, что человеческий прогресс идёт вперёд, обмениваться информацией приходиться постоянно, и мы каждый день сталкиваемся с этой проблемой, решая её с помощью мобильных телефонов, коммуникаторов и, конечно же, компьютеров. В начале 90-х годов людей тоже сильно заботила эта проблема, и они решили её следующим способом: разработкой IRC-протокола (IRC - internal relay chat). Он был создан в 1988 году финским студентом Ярко Ойкариненом (Jarkko "WiZ" Oikarinen). Этот протокол позволяет людям связываться друг с другом с помощью компьютерных программ, называемых клиентами. Клиенты в свою очередь подключаются к серверам, составляющих крупную (или мелкую) IRC-сеть. Общение происходит непосредственно на каналах сервера (иногда называемых комнатами), также пара пользователей могут обмениваться сообщениями лично друг с другом).

Так как это стало большим подспорьем в получении информации, возникли и своего рода проблемы. Появились вредители, которые мешали людям общаться. Первым решением стали IRC-сервисы (серверы с функциями управления подключённых пользователей). Однако с их помощью не всегда удаётся решить всевозможные проблемы, кроме того их установка иногда "ограничивает" самих пользователей сети. Проблема обостряется, когда каналы "разрастаются", и любое общение превращается в хаос, если там появляется один из подобных вредителей.

В дополнение к сервисам появились компьютерные программы для IRC, называемые ботами (программами, выполняющим автоматически и/или по заданному расписанию какие-либо действия). Они помогают установить порядок на каналах IRC. Помимо "жёсткого" контроля существуют боты с набором полезных функций, таких как получение погоды, поиск по мировой паутине Интернет и др.

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

Исходя из вышеприведённых проблем предопределяется актуальность выбранной темы.

Языком программирования был выбран C++. Именно этот язык сейчас используется с максимальной эффективностью в приложениях, особенно сетевых, где очень важна скорость выполнения операций. Большинство же современных существующих IRC-ботов написано на языках-интерпретаторах (Perl, Python, Ruby).

Этот проект помог нам изучить глубже С++, понять все его тонкости и особенности реализации, а также улучшить практику, ведь именно практика - основа любого программирования. А в данном случае - оно ещё и объектно-ориентированное, что упрощает наше понимание запрограммированных действий.

Следующей целью (но не менее важной) являлась помощь людям, постоянно общающимся в IRC-сетях. Ведь многие проекты (в том числе и наш) получают поддержку из IRC от обычных пользователей, желающих помочь в исправлении ошибок в исходном коде и своими советами. А чем быстрее поступит информация, тем качественнее получится результат у разработчиков.



В ходе работы было изучено множество IRC-ботов, оценены их плюсы и минусы. Так как основная цель любого бота - сервер, не обошлось и без изучения тонкостей их устройства, сервисов, спецификации IRC-протокола (RFC1459) и некоторые материалы по работе с IRC в целом.

Постановка задачи

Общие положения:


  1. Разрабатываемое программное обеспечение – далее ПО, должно поддерживать основные функции, используемые в первую очередь для осуществления контроля и защиты каналов в крупных IRC-сетях. Необходимо осуществить «портабельность» на максимальное количество операционных систем (за исключением Microsoft Windows).

  2. Разработка заканчивается сдачей преподавателю комплекта программной документации и исходного кода программы.

  3. Разработка программной документации должна удовлетворять требованиям ЕСПД (Единая Система Программной Документации).

  4. Сроки выполнения работы: начало – март 2007, окончание – май 2007.



Технические требования:


  1. Основные требования.

    1. Запуск бота осуществляется в качестве единственного фонового процесса.

    2. Конфигурационный файл должен иметь особенный формат, и бот при старте должен «искать» его в первую очередь в домашнем каталоге текущего пользователя (~), затем – в системной папке конфигураций (/etc).

    3. Отладка производится в различных IRC-сетях и на различных серверах, основная работа проверяется на одном определённом канале.

Требования к функционалу.


    1. Поддержка IPv6.

    2. Набор стандартных IRC-команд (используемых на основных серверах: Hybrid-like, IRCD, IRCu, UnrealIRCd, InspIRCd).

    3. Защита канала (от различного вида флуда).

    4. Хранение информации в базе данных должно осуществляться в виде обычного файла или с использованием SQLite3.

    5. Различные сетевые функции (ping, dns, geoip).

    6. Наличие уровней доступа пользователей (статических или динамических) для управления.

    7. Ведение логов каналов.

    8. Функции "just-for-fun" (приветствие и др.).

    9. Интеграция с основными irc-сервисами (Anope, Atheme, HybServ, RatBox Services).

Требования к документации.


    1. При создании ПО должна быть разработана программная документация в следующем объёме:

      1. Техническое задание.

      2. Текст программы на каком-либо носителе информации.

      3. Описание программы, содержащее сведения о логической структуре и функционировании программы.

      4. Руководство пользователя, включающее информацию, необходимую для установки, настройки и использования программы.

      5. Презентация ПО.

    1. Обеспечить документацию команд и функций на русском и английском языках.

Порядок контроля и приёмки.


    1. Разработанное ПО должно подвергаться приёмочным испытаниям.

    2. В процессе разработки будет согласовываться дальнейшее изменение функционала программы.

    3. Приёмочные испытания завершаются презентацией ПО преподавателям кафедры.

Дополнительные требования.


    1. Возможно добавление следующих функций в процессе доработки программы:

      1. Сетевая интеграция с поисковой системой Google.

      2. Внедрение системы скриптинга (Lua или TCL).

      3. Прочие функции (по согласованию с преподавателями

    1. Программа должна распространяться под лицензией BSD.



Средства разработки и отладки


  1. Основная ОС (Операционная Система), в которой будет производиться разработка – OpenBSD (i386).

  2. Тестирование будет проходить на ЭВМ как с 32-х битной, так и с 64-х битной архитектурой со следующими ОС: OpenBSD (i386), Linux 2.6 (i386).

  3. В качестве инструментов разработки выступают:

    1. Geany – интегрированная среда разработки для написания программного кода.

    2. Dia – программа для построения логических схем.

    3. Subversion – система управления версиями для координации действий команды разработчиков.

  1. Используемые компиляторы: GCC (GNU C Compiler) 3.3.5 (propolice), 3.4.6.

  2. Язык программирования: C++.

Анализ вариантов решения


Изначально была идея создать IRC-бота на основе одного из существующих. Были рассмотрены такие проекты как EnergyMech, AcidBlood, написанные на C. Помимо них существовали варианты реализации на PHP (NoxBot) и Ruby (rBot). Изучив "рынок", мы пришли к выводу, что ни один из перечисленных за основу взять нельзя, так как структура каждого напрямую противоречит принципам объектно-ориентированного программирования. Было решено писать бота "с нуля" (from scratch). Далее следовал выбор языка, на котором будет написан бот. Мы исходили из соображений безопасности и скорости работы, как в крупных, так и в небольших IRC-сетях, в результате чего выбор остановился на языке C++. Другим достоинством C++ является его кроссплатформенность: при соблюдении всех правил программу на C++ можно будет собрать практически под любой платформой. Операционной системой для разработки была выбрана OpenBSD, как наиболее подходящая и надёжная для работы с сетевыми приложениями из семейства UNIX. Таким образом была обозначена чёткая цель в создании IRC-бота. Проект был создан "под флагом" Open Source (с открытым исходным кодом), как свободнораспространяемый, по лицензии BSD.

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

Сравнив работу различных IRC-ботов, и протестировав их в "боевых" условиях, мы пришли к выводу, что очень многие способы их реализации устарели, а самиъ ботов необходимо оптимизировать для получения большей производительности.

Описание выбранного метода решения


Отличительной особенностью IRC-бота, разработанного нами, является мультисерверная поддержка. То есть, в результате выполнения одного системного процесса создаётся несколько соединений с различными серверами, что обеспечивает работу бота в реальном времени сразу в нескольких IRC-сетях. С расчётом на будущее была включена поддержка IPv6 (Internet Protocol version 6), разрешившая проблемы, с которыми столкнулась предыдущая версия (IPv4) при её использовании в Интернете. Ввиду сохранения универсальности, бот полностью соответствует стандартам IRC-протокола (RFC1459), что обеспечивает его совместимость с основными IRC-сетями, такими как EFnet, Undernet, DALnet, Freenode и др.

Также мы не стали ограничиваться единственным (как считалось ранее) назначением IRC-бота - защитой канала, так как он вполне может приносить пользу, например, определять страну по введённому коду или показывать текущее время системы, на которой он запущен.

Используя С++ в качестве основного инструмента разработки, мы добились хорошей производительности даже при относительно высокой загруженности бота в рабочем состоянии. Чистота и понятность программного кода, предоставленного для усовершенствования и модификации, и выбор объектно-ориентированного подхода помогли создать качественный продукт даже на таком начальном этапе.

Изначально разработанная структура проекта обеспечивает высокую масштабируемость: следуя некоторым правилам, можно легко расширить функционал. Строгая иерархия уровней выполнения операций определяет последовательность их работы, а также экономное выделение памяти, предоставленной для использования.



Описание алгоритмов и программной реализации

Файловая иерархия:


  1. cabal.h + cabal.cpp : основная часть бота

  2. core.h + core.cpp : ядро, отвечающее за работу бота и его взаимодействие с модулями

  3. engine.h + engine.cpp : "движок" (дополнительные функции)

  4. os.h, conf.h : файлы для включения стандартных библиотек

  5. network.h, connection.h : определение сетевых функций

  6. network.cpp, connection.cpp : описание сетевых функций

  7. parser.h + parser.cpp : парсер входящих IRC-сообщений

Как видно из схемы, заголовочные файлы модулей подключаются к ядру, а сами модули - к основному заголовочному файлу.



Инициализация:



Запуск:


После чтения конфигурационного файла и добавления серверов осуществляется подключение к каждому из них. Одновременно с этим запоминается время запуска.

Подключение к серверам:


При подключении к серверу определяется текущее состояние (не посуществлено ли уже подключение). Далее получается IP адрес, устанавливается TCP-соединение, и отправляются данные для регистрации на сервере.

Получение сообщения с cервера:

При чтении из сокета, "достаётся" символ и прибавляется к текущему сообщению, в противном случае возвращается сообщение об ошибке: "Невозможно получить данные с сервера" и соединение разрывается.



Получение страны по её коду:



Парсинг сообщений:

После получения сообщения на уровне сокетов, оно передаётся парсеру (некоторой программе, которая раскладывает это сообщение по нужным частям, используя специальные символы в нём).

Если сервер посылает сообщение "PING", то бот отвечает сообщением "PONG" в знак того, что он подключен к серверу (в противном случае сервер автоматически удаляет "мёртвых" клиентов). Если нет - идёт разделение сообщения по частям:
"nick!user@hostname.domain ДЕЙСТВИЕ ПОЗИЦИЯ СООБЩЕНИЕ"

где


ДЕЙСТВИЕ : "JOIN", "KICK", и т.д.

ПОЗИЦИЯ : канал или ник (если это личное сообщение)

СООБЩЕНИЕ : само сообщение
Команда отличается от обычного сообщения тем, что начинается со специального символа: если этот символ находится, и такая команда существует - она выполняется. В противном случае бот это сообщение игнорирует и ждёт другого.

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

В данный момент поддерживаются следующие команды:


  1. die : отключение бота

  2. hi : приветствие

  3. nick : изменение ника бота

  4. away : установка away-mode для бота

  5. join : вход на канал

  6. part : выход с канала

  7. cycle : перезаход на канал

  8. uptime : вывод даты и времени подключения к серверу

  9. country : вывод страны по её коду

Результаты проектирования


За предоставленное для разработки время были получены следующие результаты, описывающие текущий функционал бота:

  1. Ядро:

    1. Инициализация, аварийное отключение в случае ошибки

    2. Определение конфигурационного файла и его начальная обработка

    3. Создание, чтение, запись файла PID (Process ID)

    4. Многопоточность соединений с серверами

  1. "Движок" (дополнительные возможности):

    1. Работа в режиме "демона" (в виде фонового процесса)

    2. Получение текущего времени и момента запуска

    3. Определение страны по её коду

  1. Сетевые функции:

    1. Поддержка IPv6

    2. Определение IP адреса по доменному имени

    3. Работа с сокетами: чтение, запись

    4. Поддержка основных IRC комманд: PRIVMSG, PASS, NICK, USER, AWAY, JOIN, PART, CYCLE (JOIN+PART)

    5. Автоматический заход на канал при удалении с него (KICK)

  1. Парсер данных:

    1. Получение основных идентификационных данных пользователя (nick!user@hostname.domain)

    2. Получение IRC команды

    3. Получение местоположения пользователя (#channel / private)

    4. Идентификация входящей строки как команды или обычного сообщения

    5. Приветствие (реакция на команду 'hi')


Заключение

Подводя итог, можно сказать, что в проекте пока что реализованы не все функции, которые планировались, но была проделана колоссальная работа по изучению языка C++ в качестве средства разработки сетевых приложений. Работа с сокетами и TCP/IP стеком помогла лучше понять реализацию сетевого взаимодействия в операционных системах семейства UNIX.

При сравнении этого прототипа с существующими ботами на C выяснилось, что он отвечает приблизительно в полтора-два раза быстрее на полученные сообщения. Это говорит о том, что "скелет" сформирован довольно хорошо. Хочется отметить, что такой результат был достигнут методами постоянных оптимизаций исходного кода, заменой сложных конструкций более простыми и лёгкими.

В ближайшее время планируется добавление системы протоколирования и базы данных (преимущественно SQLite3).



Список ресурсов


  1. http://cabal.sytes.net/ - сайт проекта

  2. http://sourceforge.net/projects/cabal/ - место проекта на SourceForge.net

  3. http://www.opensource.org/licenses/bsd-license.html - текст лицензии BSD

  4. http://tools.ietf.org/html/rfc1459 - спецификация протокола IRC

  5. http://www.openbsd.org/ - сайт операционной системы OpenBSD

  6. http://www.lunar-linux.org/ - сайт одного из дистрибутивов Linux

  7. http://www.ircd-ratbox.org/ - IRC сервер RatBox

  8. http://www.ircd-hybrid.com/ IRC-сервер Hybrid

  9. http://www.inspircd.org/ - IRC-сервер InspIRCD

  10. http://coder-com.undernet.org/ - IRC-сервер Undernet

  11. http://services.ircd-ratbox.org/ - IRC-сервисы RatBox

  12. http://www.atheme.net/ - IRC-сервисы Atheme

  13. http://www.efnet.org/ - старейшая и самая многочисленная IRC-сеть

  14. http://www.freenode.net/ - сеть разработчиков с уклоном к Open Source

  15. http://www.undernet.org/ - одна из крупнейших IRC-сетей

  16. http://ru.wikipedia.org/ - on-line энциклопедия (на русском)

  17. http://en.wikipedia.org/ - on-line энциклопедия (на английском)

  18. http://www.energymech.net/ - сайт проекта EnergyMech (IRC-бот), написан на C

  19. http://linuxbrit.co.uk/rbot - IRC-бот, написанный на Ruby

  20. http://noxbot.org/ - IRC-бот, хорошо подходит для Web (написан на PHP 5)

  21. http://www.acidblood.com/ - лёгкий IRC-бот, написан на C

  22. http://www.irchelp.org/ - архив документаций по IRC

  23. http://www.xchat.org/ - один из самых известных IRC-клиентов

Похожие:

Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа студентки 245 группы

Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа студента 345 группы

Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа студента группы кн-302 Смажилюка Игоря Павловича

Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа Проверил преподаватель: Ромашина Н. Н.
Уставом о дисциплине работников железнодорожного транспорта, должностной инструкцией, приказами и инструкциями Министерства путей...
Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа Определение эйлерова пути на Прологе Халипский Сергей Николаевич Специальность: 230105
Ваша курсовая работа обладает недостатком, что не позволяет считать ее выполненной
Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа Табу в рекламе Студент 2-ого курса Группы 1055
Сентябрь 2007 Кузнецов Пётр Евгеньевич
Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconНазвание кафедры Курсовая (Контрольная) работа по предмету тема: выполнил(а): студент(ка) курса группы Специальность: 060109. 65 «Сестринское дело»

Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа студента 445 группы
Создать для существующей платформы DocsVision автогенератор классов-моделей. Требования к генератору
Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа «Проектирование вычислительной системы»
Данная контрольно-курсовая работа выполняется с целью закрепления знаний по курсу «Организация ЭВМ и систем» и получения практических...
Курсовая работа. На 20 листах. Преподаватель: Алешкин Е. Ф. Студенты группы с-24: Глаголев В. Л iconКурсовая работа изготовление анализатора углекислого газа работа выполнена : ученицей группы 3 похоруковой юлией
Поэтому проблема определения содержания углекислого газа в воздухе внутренних помещений школы является чрезвычайно актуальной. Необходим...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org