2. Структура программы.

advertisement
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра ЭВМ
Пояснительная записка к курсовой работе
на тему: «Конструктор пакетов»
Выполнили:
Проверил:
ст.гр. 750501
Максим
Кисель Р.А.
Клевакин
Киреев Е. Р.
Левкович А.A.
Минск 2011
1
Оглавление
ВВЕДЕНИЕ .......................................................................................................... 3
1
ПОСТАНОВКА ЗАДАЧИ, ВОЗМОЖНОСТИ, ПЛЮСЫ И МИНУСЫ ......... 4
1.1
Сравнительный анализ программного обеспечения по конструированию пакетов. ........ 5
1.2
Инструментарий. ............................................................................................................................. 5
2. СТРУКТУРА ПРОГРАММЫ. ......................................................................... 14
2.1
Структура утилиты pcraft-tool. .................................................................................................. 14
2.2
Протокол канального уровня Ethernet. .................................................................................... 15
2.3
Протокол ARP. ............................................................................................................................... 17
2.4
Протокол IP. ................................................................................................................................... 19
2.5
Протокол ICMP. ............................................................................................................................ 22
2.6
Протокол IGMP. ............................................................................................................................ 26
2.7
Протокол UDP. ............................................................................................................................... 27
2.8
Протокол TCP. ............................................................................................................................... 29
2.9
Протокол RIP. ................................................................................................................................ 34
2.10
Структура графического интерфейса pcraft-tool Wizard ...................................................... 35
ЗАКЛЮЧЕНИЕ .................................................................................................. 38
2
Введение
Конструктор
пакетов — компьютерная
программа,
позволяющая
сформировать и отправить в компьютерную сеть произвольный пакет.
Конструктор пакетов может быть полезен сетевым администраторам,
хакерам, или просто людям, которые изучают принципы работы различных
протоколов сети, принципы работы сетей и т.д. С его помощью можно:
проверить правила работы брандмауэра, протестировать сетевое устройство,
найти уязвимости в системе безопасности компьютера или сети, или на
наглядном примере посмотреть, что получится, если в сеть отправить
заданное количество пакетов определённого протокола. Конструктор пакетов
позволяет визуально настроить содержание пакета и отправить в сеть нужное
их количество.
Целями данного курсового проекта является:
 разработать программу, позволяющую визуально настроить
содержимое сетевого пакета нужного протокола и отправить
нужно количество сформированных пакетов в сеть;
 освоить технику построения и отправки в сеть сетевых пакетов
произвольной формы и содержания;
 изучить библиотеки работы с сетью, такие как boost asio, win
pcap, winsock2 и др.;
 изучить принцип работы с репозитория subversion;
 получить опыт работы в команде, разделяя задачи между
членами команды и объединяя результаты работы с помощью
репозитория.
3
1 Постановка задачи, возможности, плюсы и минусы
Для чего же предназначена эта программа?
Во-первых, с помощью этой программы можно визуально
редактировать, наглядным образом демонстрировать содержимое сетевых
пакетов различных протоколов. Пользователь может изменять поля пакета,
устанавливать флаги, формировать тело пакета.
Во-вторых, с помощью этой программы отправить заданное количество
пакетов в сеть.
В-третьих, простота графического интерфейса позволяет использовать
эту программу для обучения школьников и студентов основам сетевых
технологий, правилам построения пакетов и сетевых стеков протоколов.
К основным возможностям можно отнести поддержку следующих
протоколов:
1) Ethernet;
2) IPv4 (Internet Protocol);
3) ARP (Address Resolution Protocol);
4) ICMP (Internet Control Message Protocol);
5) IGMPv2 (Internet Group Management Protocol);
6) UDP (User Datagram Protocol);
7) TCP (Transmission Control Protocol);
8) RIPv2 (Routing Information Protocol).
К сожалению, ввиду нехватки времени не было реализовано несколько очень
интересных протоколов, однако структура программы предусмотрена таким
образом, чтобы её дальнейшее расширение было как можно легким.
4
1.1 Сравнительный
анализ
программного
обеспечения
по
конструированию пакетов.
В процессе изучения программных продуктов, аналогичных данному,
было обнаружено несколько достойных.
Во-первых, следует отметить Nemesis. Он отличается большим
количеством поддерживаемых типов пакетов, а также возможностью гибкой
настройки. Однако самым значительным недостатком является то, что он не
имеет графического интерфейса, что является не очень удобным в
использовании.
Во-вторых, Cat Karat. Большое количество пакетов, а также удобный
графический интерфейс позволят насладиться процессом конструирования
пакетов вдоволь. Из плюсов: изображение бегущей черной кошки во время
процесса отправки пакетов. Из недостатков: отсутствие
кроссплатформенности, а также необходимость заплатить за сие
удовольствие.
На бескрайних просторах ограниченного интернета нам удалось найти
большое
количество
аналогичных
программных
продуктов,
что
свидетельствует о популярности темы курсового проекта. Однако мы
постараемся сделать наш продукт как можно более полезным, удобным и
функциональным в использовании.
1.2 Инструментарий.
Для
того,
чтобы
создать
нужное
программное
обеспечение,
необходимо оптимально подобрать инструменты создания программы, а
также все необходимые библиотеки программного кода.
В качестве основной сетевой библиотеки был выбран boost.asio.
Проблема написания на С++ кроссплатформенного кода для работы с
сетью существует достаточно давно, и для решения этой проблемы было
создано некоторое количество библиотек. Но Boost.Asio можно назвать
5
лучшей реализацией среди существующих. На базе Boost.Asio уже построено
несколько библиотек (libpion, cpp-netlib), и кроме того, ведется разработка
новых.
К основным возможностям Boost.Asio можно отнести следующие:

возможность
написания
кросс-платформенного
сетевого
кода,
работающего на большом количестве платформ - Windows, практически
все Unix-подобные ОС, Tru64;

поддержка как IPv4, так и IPv6;

работа с TCP & UDP;

поддержка выполнения асинхронных операций;

возможность использования интерфейсов, совместимых с std::iostream;

поддержка SSL;

поддержка отложенных операций (таймеры).
Cамым главным преимуществом Boost.Asio (не считая высокой
переносимости кода) является то, что на каждой платформе реализуется
наиболее эффективная стратегия работы (epoll на Linux 2.6,kqueue на
FreeBSD/MacOSX, Overlapped IO на MS Windows), и то, что библиотека
позволяет использовать разные стратегии — синхронная и асинхронная
работа с сокетами, использование потокового ввода-вывода, совместимого
с std::iostream. И эти стратегии можно смешивать, например, принимать
соединения используя асинхронную обработку событий, а затем, запускать
тред, который будет использовать синхронный ввод-вывод данных.
В случаях, если не получается отправить пакет с помощью boost.asio
(это пакеты более низких уровней), приходит на помощь библиотека
WinPcap.
Библиотека Pcap (Packet Capture) позволяет создавать программы
анализа сетевых данных, поступающих на сетевую карту компьютера.
Примером программного обеспечения, использующего библиотеку Pcap,
служит программа Wireshark. Разнообразные программы мониторинга и
6
тестирования сети, снифферы используют эту библиотеку. Она написана для
использования языка C/C++, так что другие языки, такие как Java, .NET и
скриптовые языки, используют оболочку. Для Unix-подобных систем
используют libpcap библиотеку, а для Microsoft Windows используют
WinPcap библиотеку. Программное обеспечение сетевого мониторинга
может
использовать
libpcap
или
WinPcap,
чтобы
захватить пакеты,
путешествующие по сети, и (в более новых версиях) для передачи пакетов в
сети. Libpcap и WinPcap также поддерживают сохранение захваченных
пакетов в файл и чтение файлов, содержащих сохранённые пакеты.
Программы, написанные на основе libpcap или WinPcap, могут захватить
сетевой трафик, анализировать его. Файл захваченного трафика сохраняется
в формате, понятном для приложений, использующих Pcap.
WinPcap состоит из:

драйвера для Windows 95/98/Me, и для семейства Windows NT (Windows
NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista,
etc.),
которые
используют NDIS для
чтения
пакетов,
которые
получает сетевая карта;

Низкоуровневые библиотеки для взаимодействия с драйверами сетевых
интерфейсов.
Недостатки - работает далеко не со всеми нестандартными адаптерами (Wi-Fi
карточками, VPN и т.д.).
Для того, чтобы проверить, правильно ли был отправлен пакет,
использовался сниффер WireShark.
Wireshark (ранее — Ethereal) — программа-анализатор трафика для
компьютерных сетей Ethernet и некоторых других. Имеетграфический
пользовательский интерфейс. В июне 2006 года проект был переименован в
Wireshark из-за проблем с торговой маркой.
7
Функциональность, которую предоставляет Wireshark, очень схожа с
возможностями программы tcpdump, однако Wireshark имеет графический
пользовательский интерфейс и гораздо больше возможностей по сортировке
и фильтрации информации. Программа позволяет пользователю
просматривать весь проходящий по сети трафик в режиме реального
времени, переводя сетевую карту внеразборчивый режим (англ. promiscuous
mode).
Программа распространяется под свободной лицензией GNU GPL и
использует для формирования графического интерфейса
кроссплатформенную библиотеку GTK+. Существуют версии для
большинства типов UNIX, в том
числе Linux, Solaris, FreeBSD,NetBSD, OpenBSD, Mac OS X, а также
для Windows.
Wireshark — это приложение, которое «знает» структуру самых
различных сетевых протоколов, и поэтому позволяет разобрать сетевой
пакет, отображая значение каждого поля протокола любого уровня.
Поскольку для захвата пакетов используется pcap, существует возможность
захвата данных только из тех сетей, которые поддерживаются этой
библиотекой. Тем не менее, Wireshark умеет работать с множеством
форматов входных данных, соответственно, можно открывать файлы данных,
захваченных другими программами, что расширяет возможности захвата.
Для
управления
процессор
разработки
использовалась
система
контроля версий subversion.
Система управления версиями (от англ. Version Control System, VCS
или Revision Control System) — программное обеспечение для облегчения
работы с изменяющейся информацией. Система управления версиями
позволяет хранить несколько версий одного и того же документа, при
необходимости, возвращаться к более ранним версиям, определять, кто и
когда сделал то или иное изменение и многое другое.
8
Такие системы наиболее широко применяются при разработке
программного обеспечения, для хранения исходных кодов разрабатываемой
программы. Однако, они могут с успехом применяться и в других областях, в
которых ведётся работа с большим количеством непрерывно изменяющихся
электронных документов.
Типичной является ситуация, когда электронный документ за время
своего существования претерпевает ряд изменений. При этом часто бывает
важно иметь не только последнюю версию, но и несколько предыдущих. В
простейшем случае, можно просто хранить несколько вариантов документа,
соответствующим образом их нумеруя. Но такой способ неэффективен,
требует много внимания и часто ведёт к ошибкам. Поэтому были
разработаны средства для автоматизации этой работы.
Большинство
систем
управления
версиями
используют
централизованную модель, когда имеется единое хранилище документов,
управляемое специальным сервером, который и выполняет бо́льшую часть
функций
по
управлению
версиями.
Пользователь,
работающий
с
документами, должен сначала получить нужную ему версию документа из
хранилища. Может быть получена последняя версия или любая из
предыдущих, которая может быть выбрана по номеру версии или дате
создания. После того, как в документ внесены нужные изменения, новая
версия помещается в хранилище. В отличие от простого сохранения файла,
предыдущая версия не стирается, а тоже остаётся в хранилище и может быть
оттуда получена в любое время.
9
Схема централизованной системы управления версиями
Но в связи с тем что репозиторий всего один, возникает целый ряд
проблем, одна из них - проблема "длинных коммитов", то есть, в больших
командах возможно коммитить только большие части кода, которые покрыты
тестами и могут уже использоваться. Тому много причин, но главная возможность
поломать
что-то
готовое
в
репозитории,
что
кем-то
используется.
Потому
со
временем
появилась
более
сложная
концепция
–
распределённые системы управления версиями.
Схема распределённой системы управления версиями
Так же известны как англ. Distributed Version Control System, DVCS.
Такие системы используют распределённую модель вместо традиционной
клиент-серверной. Они, в общем случае, не нуждаются в централизованном
10
хранилище: вся история изменения документов хранится на каждом
компьютере в локальном хранилище
Когда пользователь такой системы выполняет обычные действия, такие
как извлечение определённой версии документа, создание новой версии и
тому подобное, он работает со своей локальной копией хранилища. По мере
внесения изменений, хранилища, принадлежащие разным разработчикам,
начинают различаться, и возникает необходимость в их синхронизации.
Основное преимущество распределённых систем заключается в их
гибкости. Каждый разработчик может вести работу независимо, так, как ему
удобно, сохраняя промежуточные варианты документов и передавая
результаты другим участникам, когда посчитает нужным.
Subversion (также
известная
как
«SVN»)
—
свободная централизованная система управления версиями, официально
выпущенная в 2004 году компанией CollabNet Inc.
Цель проекта — заменить собой распространенную на тот момент
систему Concurrent
Versions
System (CVS),
которая
ныне
считается
устаревшей. Subversion реализует все основные функции CVS и свободна от
ряда недостатков последней.
В настоящее время Subversion используется многими сообществами
разработчиков открытого
программного
обеспечения (в
том
числе
сообществами, ранее использовавшими CVS).
В
их
числе
такие
известные
проекты,
как Apache, GCC, Free
Pascal, Python,Ruby, Mono, FreeBSD, Haiku, AROS и MediaWiki.
Subversion
также широко используется в закрытых проектах и корпоративной
сфере.Хостинг Subversion, в том числе для проектов с открытым кодом,
также
предоставляют
популярные
хостинг-
проекты SourceForge.net,Tigris.org, Google Code и BountySource.
11
В 2007
году независимая
преимущества
и
компания
недостатки
Forrester
различных
Research,
сравнивая
оценила
Subversion
систем,
как «единоличного лидера в категории Standalone Software Configuration
Management (SCM) и сильного участника в категории Software Configuration
and Change Management (SCCM)».
По
данным
статистики
дистрибутивов Debian и Ubuntu,
использования
количество
активных
пакетов Linuxпользователей
Subversion примерно такое же, как у Git, и превосходит аналогичный
показатель для CVS, Mercurial и Bazaar (по состоянию на июнь 2011 года).
Графический интерфейс был реализован с использованием технологии
WPF (Windows Presentation Foundation) – системы для построения
клиентских приложений Windows с привлекательными возможностями
взаимодействия с пользователем.
В основе WPF лежит векторная система визуализации, не зависящая от
разрешения устройства вывода и созданная с учётом возможностей
современного графического оборудования. WPF предоставляет средства для
создания визуального интерфейса, включая Язык XAML (Extensible
Application Markup Language), элементы управления, привязку данных,
макеты, двухмерную и трёхмерную графику, анимацию, стили, шаблоны,
документы, текст, мультимедиа и оформление.
Графической технологией, лежащей в основе WPF, является DirectX, в
отличие от Windows Forms, где используется GDI/GDI+. Производительность
WPF выше, чем у GDI+ за счёт использования аппаратного ускорения
графики через DirectX.
XAML представляет собой XML, в котором фактически реализованы
классы .NET Framework. Так же реализована модель разделения кода и
дизайна, позволяющая кооперироваться программисту и дизайнеру. Кроме
того, есть встроенная поддержка стилей элементов, а сами элементы легко
12
разделить на элементы управления второго уровня, которые, в свою очередь,
разделяются до уровня векторных фигур и свойств/действий.
Для работы с WPF требуется любой .NET-совместимый язык. В этот
список входит множество языков: C#, VB, C++, Ruby, Python, Delphi (Prism),
Lua и многие другие. В данном курсовом проекте для работы с Windows
Presentation Foundation был выбран язык C#.
В качестве среды разработки была выбрана Microsoft Visual Studio 2010.
Причиной такого выбора стала возможность разработки программных
продуктов на языках C# 4.0 и С++, а также использования технологии WPF.
13
2. Структура программы.
Проект конструктора пакетов состоит из двух программ. Первая – это
утилита pcraft-tool, которая запускается из командной строки и отправляет
пакет нужного формата. Формат пакета передается ей в качестве параметров
командной строки. Вторая – это графический интерфейс pcraft-tool-wizard,
который позволяет визуально настроить форму и содержание пакета,
сформировать командную строчку, и выполнить утилиту отправки пакета с
нужными параметрами.
Такое разделение дает некоторые плюсы:
 удобство процесса разработки и разделения задач между группой
людей;
 возможность использовать утилиту для отправки пакета отдельно
от графического интерфейса.
2.1 Структура утилиты pcraft-tool.
Утилита pcraft-tool представляет собой набор классов заголовков и
пакетов различных протоколов.
В главной функции программы происходит разбор командной строки,
переданной утилите, создание необходимых объектов заголовков, из которых
формируются объекты пакетов, которые отправляются в сеть.
Как известно, в соответствии с организацией стека протоколов TCP/IP,
пакеты более высокого уровня инкапсулируются в пакеты более низкого
уровня. Так, например, чтобы отправить пакет ARP протокола, необходимо
сформировать его заголовок, затем сформировать заголовок Ethernet
протокола, обернуть ARP заголовок в заголовок Ethernet и отправить.
Далее на рисунке показано, каким образом инкапсулируются пакеты
перед отправкой:
14
IP
UDP
ICMP
TCP
Ethernet
RIP
IGMP
ARP
На
рисунке
поддерживаются
слева-направо
программой.
Они
показаны
расположены
протоколы,
по
которые
уровням
стека
протоколов TCP/IP, начиная от канального и до прикладного.
Далее в этом разделе будет описана информация о поддерживаемых
протоколах.
2.2
Протокол канального уровня Ethernet.
Ethernet ([ˈiːθərˌnɛt] от англ. ether [ˈiːθər] «эфир») —
пакетная технология
передачи
данных
преимущественно
локальных компьютерных сетей.
Стандарты
Ethernet
определяют
проводные
соединения
и
электрические сигналы на физическом уровне, формат кадров и протоколы
управления доступом к среде — на канальном уровне модели OSI. Ethernet в
основном описывается стандартами IEEE группы 802.3. Ethernet стал самой
распространённой технологией ЛВС в середине 90-х годов прошлого века,
вытеснив такие устаревшие технологии, как Arcnet, FDDI и Token ring.
15
Ethernet Version 2 или Ethernet-кадр II, ещё называемый DIX
(аббревиатура первых букв фирм-разработчиков DEC, Intel, Xerox) —
наиболее распространена и используется по сей день. Часто используется
непосредственно протоколом интернет.
Наиболее распространенный формат кадра Ethernet II
В качестве дополнения Ethernet-кадр может содержать тег IEEE
802.1Q для идентификации VLAN, к которой он адресован, и IEEE 802.1p для
указания приоритетности.
Разные типы кадра имеют различный формат и значение MTU.
При проектировании стандарта Ethernet было предусмотрено, что
каждая сетевая карта (равно как и встроенный сетевой интерфейс) должна
иметь уникальный шестибайтный номер (MAC-адрес), прошитый в ней при
изготовлении. Этот номер используется для идентификации отправителя и
получателя кадра, и предполагается, что при появлении в сети нового
компьютера (или другого устройства, способного работать в сети) сетевому
администратору не придётся настраивать MAC-адрес.
Уникальность
MAC-адресов
достигается
тем,
что
каждый
производитель получает в координирующем комитете IEEE Registration
Authority диапазон из шестнадцати миллионов (2^24) адресов, и по мере
исчерпания выделенных адресов может запросить новый диапазон. Поэтому
по трём старшим байтам MAC-адреса можно определить производителя.
Существуют таблицы, позволяющие определить производителя по MACадресу; в частности, они включены в программы типа arpalert.
16
Некоторое время назад, когда сетевые карты не позволяли изменить
свой MAC-адрес, некоторые провайдеры Internet использовали его для
идентификации машины в сети при учёте трафика. Но все современные
сетевые платы позволяют программно изменить MAC-адрес, однако если
плата будет обесточена, то восстановится исходный MAC-адрес. Программы
из Microsoft Office, начиная с версии Office 97, записывали MAC-адрес
сетевой платы в редактируемый документ в качестве составляющей
уникального GUID-идентификатора.
2.3
Протокол ARP.
ARP (англ. Address
Protocol —
Resolution
протокол
определения
адреса) — использующийся в компьютерных сетях протокол низкого уровня,
предназначенный для определения адреса канального уровня по известному
адресу сетевого уровня. Наибольшее распространение этот протокол получил
благодаря повсеместности сетей IP, построенных поверх Ethernet, поскольку
практически в 100 % случаев при таком сочетании используется ARP.
Описание протокола было опубликовано в ноябре 1982 года в RFC 826.
ARP был спроектирован для случая передачи IP-пакетов через сегмент
Ethernet. При этом общий принцип, предложенный для ARP, может, и был
использован и для сетей других типов.
Существуют следующие типы сообщений ARP: запрос ARP (ARP
request) и ответ ARP (ARP reply). Система-отправитель при помощи запроса
ARP запрашивает физический адрес системы-получателя. Ответ (физический
адрес узла-получателя) приходит в виде ответа ARP.
Перед тем как передать пакет сетевого уровня через сегмент
Ethernet, сетевой
стек проверяет
кэш
ARP,
чтобы
выяснить,
не
зарегистрирована ли в нём уже нужная информация об узле-получателе. Если
такой записи в кэше ARP нет, то выполняется широковещательный запрос
17
ARP. Этот запрос для устройств в сети имеет следующий смысл: «Ктонибудь знает физический адрес устройства, обладающего следующим IPадресом?» Когда получатель с этим IP-адресом примет этот пакет, то должен
будет ответить: «Да, это мой IP-адрес. Мой физический адрес следующий:
…» После этого отправитель обновит свой кэш ARP и будет способен
передать информацию получателю. Ниже приведён пример запроса и ответа
ARP.
Ниже проиллюстрирована структура пакета, используемого в
запросах
и
ответах
ARP.
В
сетях Ethernet в
этих
пакетах
используется EtherType 0x0806, и рассылаются широковещательно MACадрес — FF:FF:FF:FF:FF:FF. Отметим, что в структуре пакета, показанной
ниже в качестве SHA, SPA, THA, & TPA условно используются 32битныеслова — реальная длина определяется физическим устройством и
протоколом.
Hardware type (HTYPE)
Каждый транспортный протокол передачи данных имеет свой
номер, который хранится в этом поле. Например, Ethernet имеет номер
0x0001.
18
Protocol type (PTYPE)
Код протокола. Например, для IPv4 будет записано 0x0800.
Hardware length (HLEN)
Длина физического адреса в байтах. Ethernet адреса имеют длину
6 байт.
Protocol length (PLEN)
Длина логического адреса в байтах. IPv4 адреса имеют длину 4
байта.
Operation
Код операции отправителя: 1 в случае запроса и 2 в случае
ответа.
Sender hardware address (SHA)
Физический адрес отправителя.
Sender protocol address (SPA)
Логический адрес отправителя.
Target hardware address (THA)
Физический адрес получателя. Поле пусто при запросе.
Target protocol address (TPA)
Логический адрес получателя.
2.4 Протокол IP.
Internet
Protocol —
межсетевой протокол.
Относится
к маршрутизируемым протоколам сетевого уровня семейства TCP/IP.
Протокол IP используется для негарантированной доставки данных,
разделяемых на так называемые пакеты от одного узла сети к другому. Это
означает, что на уровне этого протокола (третий уровень сетевой модели
OSI) не даётся гарантий надёжной доставки пакета до адресата. В частности,
пакеты могут прийти не в том порядке, в котором были отправлены,
19
продублироваться (когда приходят две копии одного пакета; в реальности это
бывает крайне редко), оказаться повреждёнными (обычно повреждённые
пакеты уничтожаются) или не прибывает вовсе. Гарантию безошибочной
доставки пакетов дают протоколы более высокого уровня (транспортного
уровня) сетевой модели OSI — например, TCP — которые используют IP в
качестве транспорта.
В современной сети Интернет используется IP четвёртой версии, также
известный как IPv4. В протоколе IP этой версии каждому узлу сети ставится
в соответствие IP-адресдлиной 4 октета (4 байта). При этом компьютеры
в подсетях объединяются общими начальными битами адреса. Количество
этих бит, общее для данной подсети, называетсямаской подсети (ранее
использовалось деление пространства адресов по классам — A, B, C; класс
сети определялся диапазоном значений старшего октета и определял число
адресуемых
узлов в данной
сети, сейчас используется бесклассовая
адресация).
IP-пакет —
форматированный
блок информации,
передаваемый
по вычислительной сети. Соединения вычислительных сетей, которые не
поддерживают пакеты, такие как традиционные соединения типа «точкаточка»
в
телекоммуникациях,
просто
передают
последовательности байтов, символов или битов.
При
данные
в
виде
использовании
пакетного форматирования сеть может передавать длинные сообщения более
надежно и эффективно.
20
Формат заголовка IP-пакета

Версия — для IPv4 значение поля должно быть равно 4.

IHL — длина заголовка IP-пакета в 32-битных словах (dword). Именно это
поле указывает на начало блока данных в пакете. Минимальное
корректное значение для этого поля равно 5.

Идентификатор —
предназначенное
значение,
для
назначаемое
определения
отправителем
корректной
пакета
и
последовательности
фрагментов при сборке датаграммы. Для фрагментированного пакета все
фрагменты имеют одинаковый идентификатор.

3 бита флагов. Первый бит должен быть всегда равен нулю, второй бит DF
(don’t fragment) определяет возможность фрагментации пакета и третий
бит MF (more fragments) показывает, не является ли этот пакет последним
в цепочке пакетов.

Смещение фрагмента — значение, определяющее позицию фрагмента в
потоке данных.
21

Время жизни (TTL) — число маршрутизаторов, которые должен пройти
этот пакет. При прохождении маршрутизатора это число уменьшатся на
единицу. Если значения этого поля равно нулю то, пакет должен быть
отброшен и отправителю пакета может быть послано сообщение Time
Exceeded (ICMP код 11 тип 0).

Протокол — идентификатор интернет-протокола следующего уровня
указывает, данные какого протокола содержит пакет, например, TCP или
ICMP. В IPv6 называется «Next Header».

Контрольная сумма заголовка — вычисляется с использованием операций
поразрядного сложения 16-разрядных слов заголовка по модулю 2. Сама
контрольная сумма является дополнением по модулю один полученного
результата сложения.
2.5 Протокол ICMP.
ICMP (англ. Internet Control Message Protocol — протокол межсетевых
управляющих сообщений) — сетевой протокол, входящий встек протоколов
TCP/IP. В основном ICMP используется для передачи сообщений об ошибках
и других исключительных ситуациях, возникших при передаче данных,
например,
запрашиваемая
услуга
недоступна,
или
хост,
или маршрутизатор не отвечают. Также на ICMP возлагаются некоторые
сервисные функции.
Протокол ICMP описан в RFC 792 (с дополнениями в RFC 950) и
является стандартом Интернета (входит в стандарт STD 5 вместе с IP). Хотя
формально ICMP используетIP (ICMP-пакеты инкапсулируются в IP пакеты),
он является неотъемлемой частью IP и обязателен при реализации стека
TCP/IP.
Текущая
версия
ICMP
для IPv4 называется
ICMPv4.
В IPv6 существует аналогичный протокол ICMPv6.
ICMP-сообщение строится из IP-пакетов, сгенерировавших ICMPответ. IP инкапсулирует
соответствующее
ICMP-сообщение
с
новым
22
заголовком IP (чтобы отправить ICMP-сообщение обратно отправителю) и
передает полученные пакеты дальше.
Например, каждая машина (такая, как маршрутизатор), которая
перенаправляет IP-пакеты, уменьшает Time to live (TTL) поля заголовка IP на
единицу, если TTL достигает 0, ICMP-сообщение о превышении TTL
отправляется на источник пакета.
Каждое
ICMP-сообщение
инкапсулируется
непосредственно
в
пределах одного IP-пакета, и, таким образом, как и UDP, ICMP является
ненадежным (надежным является TCP).
ICMP основан на протоколе IP. Его цели отличны от целей
транспортных протоколов, таких как TCP и UDP: он, как правило, не
используется для передачи и приема данных между конечными системами.
ICMP не используется непосредственно в приложениях пользователей сети
(исключение составляют инструменты Ping и Traceroute).
Типы пакетов ICMP (полный список):

0 — Эхо-ответ

1 — Зарезервировано

2 — Зарезервировано

3 — Адресат недоступен
код 0 — Сеть недостижима
код 1 — Узел недостижим
код 2 — Протокол недостижим
код 3 — Порт недостижим
23
код 4 — Необходима фрагментация, но установлен флаг ее запрета (DF)
код 5 — Неверный маршрут от источника
код 6 — Сеть назначения неизвестна
код 7 — Узел назначения неизвестен
код 8 — Узел источник изолирован
код 9 — Сеть административно запрещена
код 10 — Узел административно запрещен
код 11 — Сеть недоступна для ToS
код 12 — Узел недоступен для ToS
код 13 — Коммуникации административно запрещены
код 14 — Нарушение порядка предпочтения узлов
код 15 — Активно отсечение порядка предпочтения

4 — Сдерживание источника (отключение источника при переполнении
очереди)

5 — Перенаправление
код 0 — Перенаправление пакетов в сеть
Код 1 — Перенаправление пакетов к узлу
Код 2 — Перенаправление для каждого типа обслуживания (TOS)
Код 3 — Перенаправление пакета к узлу для каждого типа обслуживания

6 — Альтернативный адрес узла

7 — Зарезервировано

8 — Эхо-запрос

9 — Объявление маршрутизатора (RFC-1256)
код 0 — Нормальное объявление маршрутизатора
код 16 — Не маршрутизировать обычный трафик

10 — Запрос маршрутизатора (RFC-1256)
24

11 — Превышение временного интервала (для дейтаграммы время жизни
истекло)
код 0 — Время жизни пакета (TTL) истекло при транспортировке
код 1 — Время жизни пакета (время сборки фрагментов) истекло при
дефрагментации

12 — Неверный параметр (проблема с параметрами дейтаграммы: ошибка
в IP-заголовке или отсутствует необходимая опция)
код 0 — Указатель говорит об ошибке
код 1 — Отсутствует требуемая опция
код 2 — Некорректная длина

13 — Запрос метки времени

14 — Ответ с меткой времени

15 — Информационный запрос

16 — Информационный ответ

17 — Запрос адресной маски (RFC-950)

18 — Отклик на запрос адресной маски (RFC-950)

19 — Зарезервировано (для обеспечения безопасности)

20-29 — Зарезервировано (для экспериментов на устойчивость к
ошибкам)

30 — Трассировка маршрута (RFC-1393)

31 — Ошибка преобразования датаграммы (RFC-1475)

32 — Перенаправление для мобильного узла

33 — IPv6 Where-Are-You (где вы находитесь)

34 — IPv6 I-Am-Here (я здесь)

35 — Запрос перенаправления для мобильного узла

36 — Отклик на запрос перенаправления для мобильного узла

37 — Запрос доменного имени (Domain Name Request)
25

38 — Ответ на запрос доменного имени (Domain Name Reply)

39 — SKIP

40 — Photuris
код 0 — Зарезервировано
код 1 — Неизвестный индекс параметров безопасности (Unkown Security
Parameters Index)
код 2 — Параметры безопасности верны, но произошла ошибка
аутентификации (Valid Security Parameters, but Authentication Failed)
код 3 — Параметры безопасности верны, но произошел сбой при
расшифровке (Valid Security Parameters, but Decryption Failed)
код 4 — Требуется проверка подлинности (Need Authentication)
код 5 — Требуется авторизация (Need Authorization)

41-255 — Зарезервировано
2.6 Протокол IGMP.
IGMP (англ. Internet
управления
группами
Group
Management
Protocol —
протокол
Интернета) — протокол управления групповой
(multicast) передачей данных в сетях, основанных на протоколе IP. IGMP
используется маршрутизаторами и IP-узлами для
организации
сетевых
устройств в группы.
Этот
протокол
является
частью
спецификации групповой
передачи пакетов в IP-сетях. IGMP расположен выше сетевого уровня, хотя,
по сути, действует не как транспортный протокол.[1] Он во многом
аналогичен ICMP для односторонней передачи. IGMP может использоваться
для поддержки потокового видео и онлайн-игр, для этих типов приложений
он позволяет использовать сетевые ресурсы более эффективно. IGMP уязвим
к некоторым атакам[2][3][4][5], и брандмауэры обычно позволяют пользователю
отключить этот протокол, если в нем нет необходимости.
26
IGMP используется только в сетях IPv4, так как в IPv6 групповая передача
пакетов реализована по-другому.
Код макс. ответа (Max Resp Code)
В этом поле указывается максимальное время (в 1/10 секунды)
ожидания ответа, соответствующего данному запросу. Если значением
является число, меньшее 128, оно используется напрямую. Если же значение
больше или равно 128, оно интерпретируется как экспонента с мантиссой.
Групповой адрес (Group Address)
Групповой адрес, используемый в запросах с указанием группы.
Приобщем запросе это поле устанавливается равным нулю.
2.7 Протокол UDP.
UDP (англ. User
Datagram
Protocol —
протокол
пользовательских дейтаграмм) — это транспортный протокол для передачи
данных в сетях IP без установления соединения. Он является одним из самых
простых
протоколов транспортного
уровня модели
OSI.
Его IP-
идентификатор — 0x11.
В отличие от TCP, UDP не подтверждает доставку данных, не
заботится о корректном порядке доставки и не делает повторов. Поэтому
аббревиатуру
UDP
иногда
расшифровывают
как Unreliable
Datagram
Protocol (протокол ненадёжных датаграмм). Зато отсутствие соединения,
дополнительного трафика и возможность широковещательных рассылок
делают его удобным для применений, где малы потери, в массовых
рассылках локальной подсети, в медиапротоколах и т.п.
27
Если задействован порт отправителя, то он указывает порт процесса,
посылающего датаграмму. Можно принять, что это тот порт, на который при
отсутствии какой-либо иной информации следует адресовать ответную
датаграмму. Если данное поле не задействовано, то в него следует записать
нули. Порт получателя имеет смысл только в контексте конкретного Internet
адреса получателя.
Длина — длина в октетах данной датаграммы, включая как заголовок,
так и данные (Это означает, что минимальное значение поля длины равно
восьми).
В псевдозаголовке, который «понарошку» добавляется к UDP-заголовку,
указываются адреса отправителя и получателя, номер протокола и длина
UDP-датаграммы. Процедура вычисления контрольной суммы такая же, как
и в протоколе TCP.
Если расчетная контрольная сумма равна нулю, то соответствующее
поле заполняется всеми единицами. Если поле заполнено одними нулями, это
означает, что отправитель датаграммы не вычислял контрольной суммы, что
может быть сделано при отладке, а также для тех протоколов, которые не
требуют точности передачи.
Здесь следует внести небольшое пояснение. При дополнении до единицы,
или, что то же, при обратном представлении числа, запись со всеми нулями
эквивалентна записи со всеми единицами. Обе они обозначают нуль.
Поскольку первый бит является знаковым, число, состоящее из всех нулей
28
называют
положительным
нулём,
а
состоящее
из
всех
единиц —
отрицательным. Несмотря на их математическую эквивалентность, в поле
контрольной суммы UDP, как можно было видеть, они используются поразному. Положительный ноль указывает на то, что контрольная сумма
намеренно не вычислялась, а отрицательный ноль, на то, что вычисленная
контрольная сумма оказалась равной нулю.
2.8 Протокол TCP.
Transmission
передачей) —
предназначенный
Control
один
для
из
Protocol
(TCP) (протокол
основных сетевых
управления передачей
управления
протоколов Интернета,
данных в
сетях
и
подсетях TCP/IP.
Выполняет функции протокола транспортного уровня модели OSI.
TCP — это транспортный механизм, предоставляющий поток данных, с
предварительной установкой соединения, за счёт этого дающий уверенность
в достоверности получаемых данных, осуществляет повторный запрос
данных в случае потери данных и устраняет дублирование при получении
двух копий одного пакета (см. также T/TCP). В отличие от UDP гарантирует
целостность передаваемых данных и уведомление отправителя о результатах
передачи.
Реализация TCP, как правило, встроена в ядро ОС, хотя есть и
реализации TCP в контексте приложения.
Когда осуществляется передача от компьютера к компьютеру через
Интернет, TCP работает на верхнем уровне между двумя конечными
системами, например, браузером и веб-сервером. Также TCP осуществляет
надежную передачу потока байтов от одной программы на некотором
компьютере к другой программе на другом компьютере. Программы для
29
электронной почты и обмена файлами используют TCP. TCP контролирует
длину сообщения, скорость обмена сообщениями, сетевой трафик.
Порт источника
Порт источника
идентифицирует
приложение
клиента,
с
которого
отправлены пакеты. По возвращении данные передаются клиенту на
основании номера порта источника.
Порт назначения
Порт назначения идентифицирует порт, на который отправлен пакет.
TCP-порты
Существует набор служб (использующих для передачи данных TCP), за
которыми закреплены определенные порты:

20/21 — FTP

22 — SSH

23 — Telnet

25 — SMTP

80 — HTTP
30

110 — POP3

194 — IRC (Internet Relay Chat)

443 — HTTPS (Secure HTTP)

1863 — MSN Messenger

2000 — Cisco SCCP (VoIP)

3389 — RDP

8080 — альтернативный порт HTTP
См. Список портов TCP и UDP
Номер последовательности
Номер последовательности выполняет две задачи:
1. Если установлен флаг SYN, то это начальное значение номера
последовательности — ISN (Initial Sequence Number), и первый байт
данных, которые будут переданы в следующем пакете, будет иметь
номер последовательности, равный ISN + 1.
2. В противном случае, если SYN не установлен, первый байт данных,
передаваемый в данном пакете, имеет этот номер последовательности.
Поскольку поток TCP в общем случае может быть длиннее, чем число
различных
состояний
этого
поля,
то
все
операции
с
номером
последовательности должны выполняться по модулю 2^32. Это накладывает
практическое ограничение на использование TCP. Если скорость передачи
коммуникационной системы такова, чтобы в течение MSL (максимального
времени
жизни
сегмента)
произошло
переполнение
номера
последовательности, то в сети может появиться два сегмента с одинаковым
номером, относящихся к разным частям потока, и приёмник получит
некорректные данные.
31
Номер подтверждения
Если установлен флаг ACK, то это поле содержит номер последовательности,
ожидаемый получателем в следующий раз. Помечает этот сегмент как
подтверждение получения.
Смещение данных
Это поле определяет размер заголовка пакета TCP в 4-байтных (4-октетных)
словах. Минимальный размер составляет 5 слов, а максимальный — 15, что
составляет 20 и 60 байт соответственно. Смещение считается от начала
заголовка TCP.
Зарезервировано
Зарезервировано
(6
бит)
для
будущего
использования
и
должно
устанавливаться в ноль. Из них два (5-й и 6-й) уже определены:

CWR (Congestion
Window
Reduced) —
Поле
«Окно
перегрузки
уменьшено» — флаг установлен отправителем, чтоб указать, что получен
пакет с установленным флагом ECE (RFC 3168)

ECE (ECN-Echo) — Поле «Эхо ECN» — указывает, что данный узел
способен на ECN (явное уведомление перегрузки) и для указания
отправителю о перегрузках в сети (RFC 3168)
Флаги (управляющие биты)
Это поле содержит 6 битовых флагов:

URG — Поле «Указатель важности» задействовано (англ. Urgent pointer
field is significant)

ACK —
Поле «Номер
подтверждения» задействовано
(англ. Acknowledgement field is significant)

PSH — (англ. Push function) инструктирует получателя протолкнуть
данные, накопившиеся в приемном буфере, в приложение пользователя
32

RST —
Оборвать
соединения,
сбросить
буфер
(очистка
буфера)
(англ. Reset the connection)

SYN — Синхронизация номеров последовательности (англ. Synchronize
sequence numbers)

FIN (англ. final,
бит) —
флаг,
будучи
установлен,
указывает
на
завершение соединения (англ. FIN bit used for connection termination).
Окно
В этом поле содержится число, определяющее в байтах размер данных,
которые получатель готов принять.
Контрольная сумма
Поле контрольной суммы — это 16-битное дополнение к сумме всех 16битных слов заголовка(включая псевдозаголовок) и данных. Если сегмент, по
которому вычисляется контрольная сумма, имеет длину не кратную 16-ти
битам, то длина сегмента увеличивается до кратной 16-ти, за счет
дополнения к нему справа нулевых битов заполнения. Биты заполнения (0)
не передаются в сообщении и служат только для расчёта контрольной
суммы. При расчёте контрольной суммы значение самого поля контрольной
суммы принимается равным 0.
Указатель важности
16-битовое значение положительного смещения от порядкового номера в
данном сегменте. Это поле указывает порядковый номер октета, которым
заканчиваются важные (urgent) данные. Поле принимается во внимание
только для пакетов с установленным флагом URG.
Опции
Могут применяться в некоторых случаях для расширения протокола. Иногда
используются для тестирования. На данный момент в опции практически
всегда включают 2 байтаNOP (в данном случае 0x01) и 10 байт,
33
задающих timestamps. Вычислить длину поля опции можно через значение
поля смещения.
2.9 Протокол RIP.
Протокол
Protocol)
—
маршрутной
один
Применяется
из
в
информации
самых
(англ. Routing Information
простых протоколов маршрутизации.
небольших компьютерных
позволяет маршрутизаторам динамически
обновлять
сетях,
маршрутную
информацию (направление и дальность в хопах), получая ее от соседних
маршрутизаторов.
RIP — так называемый протокол дистанционно-векторной маршрутизации,
который
оперирует хопами (ретрансляционными
качестве метрики
маршрутизации.
Максимальное
"скачками")
количество
в
хопов,
разрешенное в RIP — 15 (метрика 16 означает «бесконечно большую
метрику»). Каждый RIP-маршрутизатор по умолчанию вещает в сеть свою
полную таблицу маршрутизации раз в 30 секунд, довольно сильно нагружая
низкоскоростные
линии
связи.
RIP
работает
на прикладном
уровне стека TCP/IP, используяUDP порт 520.
В современных сетевых средах RIP — не самое лучшее решение для выбора
в качестве протокола маршрутизации, так как его возможности уступают
более современным протоколам, таким как EIGRP, OSPF. Ограничение на 15
хопов не дает применять его в больших сетях. Преимущество этого
протокола — простота конфигурирования.
34
Address Family Identifier - (AFI) Тип адреса, обычно поддерживается только
запись AF_INET, которое равно 2 (т.е. используется для протокола IP)
Route Tag - (RT) Тег маршрута. Предназначен для разделения "внутренних"
маршрутов от "внешних", взятых, например, из другого IGP или EGP
IP Address - IP адрес места назначения
Subnet Mask - Маска подсети
Next Hop - Следующий хоп. Содержит IP адрес маршрутизатора к месту
назначения. Значение 0.0.0.0 - хопом к месту назначения является
отправитель пакета. Незаменимо, если протокол RIP не может быть запущен
на всех маршрутизаторах!
Metric - Метрика маршрута
2.10 Структура графического интерфейса pcraft-tool Wizard
Логически интерфейс можно поделить на три блока:
a.
Опции программы
b.
Опции выбранного протокола
c.
Консоль
Опции программы содержат следующие пункты:
 Опция выбора протокола (см. п.1 на рисунке) – представляет собой
выпадающий список со всеми поддерживаемыми модулем pcraft-tool
протоколами.
 Опция «Количество пакетов» (см. п.2 на рисунке) - позволяет выбрать
количество пакетов, которые будут сгенерированы программой.
 Опция выбора интерфейса (см. п.3 на рисунке) – предоставляет
пользователю право выбрать номер интерфейса, который будет
использован программой
35
Опции выбранного протокола варьируются в зависимости от протокола,
выбранного пользователем. По умолчанию каждой опции задано
определённое значение.
36
Блок Консоль состоит из текстбокса, извещающего пользователя о
сгенерированной командной строке; кнопок “Send” – сконструировать и
отправить пакет, и “Clear” – очистить консоль.
37
Заключение
Нами была проделана здоровенная работа. Разработана структура,
архитектура, изучены необходимые библиотеки и программы, с нуля
написано
законченное
приложение,
которое
обладает
большим
функционалом, стильным дизайном и хорошей органомикой.
Наша программа выложена в репозиторий для свободного скачивания.
Каждый может пользоваться этой программой, смотреть и исправлять
исходный код, добавлять новые возможности. Администратор, хакер,
начинающий конструктор пакетов, учитель, строитель, портной и даже
продавец
найдут
эту
программу
полезной.
Теперь
мы
можем
похвастаться, что сделали для общества продукт, который сквозь века
гордо несет своё название PacketBuilder.
38
Download