Трафик генератор Ostinato в UNetLAB

Программа Ostinato неплоха, но есть и аналоги, один из которых я и хотел бы рассмотреть сейчас. Речь пойдёт о программе Cat KARAT .

Внешний вид программы весьма понятен. Панель инструментов, список интерфейсов (1). Выбирать “шумящую” карточку можно двойным кликом. Справа – редактор потока. Выбираем уровни OSI, через какие модификаторы пройдёт пакет, прежде чем выйдет наружу. Я выставил (2) -> IPv4 (3) -> UDP (4)->.

Внизу (5), во вкладках, начинаем редактировать параметры пакетов.


На вкладке Control мы можем изменить количество генерируемых пакетов (1) и паузу между ними (2)


Следующая вкладка – 2-ой уровень OSI. Выставляем аппаратные адреса источника и получателя. Для удобства есть быстрые кнопки, записать свой MAC-адрес и в назначение поставить бродкаст, то есть широковещательный пакет, который получат все устройства сегмента.

Следующая вкладка – редактирование параметров IP протокола (3 уровень). Здесь мы можем изменить IP источника и IP получателя. Опять же, есть кнопки быстрого заполнения полей адресов – свой и широковещательный. Помимо этого здесь можно редактировать некоторые параметры пакета, фрагментацию, протокол инкапсулированного уровня, QoS-флаги…


При выборе других путей следования потока (например протокол ARP или DHCP) будут появляться другие вкладки, где можно редактировать параметры:


Но вернемся к UDP. Послать пакет в сеть можно нажав кнопку “Play”. Я настроил виртуальную машину с Linux Microcore на втором конце и посадил туда tcpdump:


Нетрудно заметить, что источник и получатель, а так же номера портов и протокол в точности соответствуют заявленным в программе. Значит отправка произвольного пакета сработала.

Песочница

pull 2 февраля 2012 в 16:49

Генерация трафика в linux на уровне ядра

  • Чулан *

Привет All!

Хочу рассказать вам о генерации трафика в linux на уровне ядра. Для чего это нужно - спросите вы? Ну, например для тестирования маршрутизаторов, свитчей, сетевых карт, устранения конкурентов - отвечу я, в этом ключе мы и используем в данное время генератор.
Генератор трафика работающий на уровне ядра системы имеет огромную производительность и способен генерировать трафик на скорости сетевого интерфейса. Производительность генерации трафика зависит от железа.На производительность влияют такие параметры как: производительность CPU, скорость шины PCI, задержки памяти, задержки DMA, количество чтения/запись в MMIO и другие.Оптимизация производительности, это тема отдельной статьи и здесь её затрагивать не будем.
Для генерации трафика в linux используется модуль pktgen. После запуска модуль pktgen, создает поток ядра и привязывает его к CPU, к потоку привязываются устройства через которые будет проходит сгенерированный, такие как /dev/eth, /dev/vlan. Соответственно 1 CPU - 1 поток, 2 CPU - 2 потока и так далее. К каждому CPU можно привязать несколько устройств, с разными настройками, что дает необходимую гибкость в управлении генератором. Так же у генератора есть ограничение, а точнее - TTL=3, то есть трафик пройдет через 3 хоста и дальше не уйдет.
Быстрый старт или практическая часть
Собираем примитивную схему:

Для запуска генератора нам понадобится модуль ядра pktgen, загрузить его можно командой:

#modprobe pktgen

Проверяем загрузился модуль или нет, вывод должен быть похож на такой:

# lsmod | grep pktgen
pktgen 66645 1

После загрузки модуля появится директория /proc/net/pktgen/ , она служит для мониторинга и управления генератором, в ней можно увидеть:
/proc/net/pktgen/pgctrl - управление потоком
/proc/net/pktgen/kpktgend_X - статус генератора
/proc/net/pktgen/ethX(vlanX) - просмотр статистики по устройству

Для запуска генератора, ему необходимо передать параметры, для этого воспользуемся одним из скриптов приведенных в примерах

Возьмем самый простой из них скрипт , который использует 1 процессор и 1 сетевой интерфейс.
Отредактируем строки: pgset "dst 10.10.11.2" и pgset "dst_mac 00:04:23:08:91:dc" , заменим их на pgset "dst 192.168.0.1" и pgset "dst_mac мак адрес вашего маршрутизатора"
Теперь можно запустить генератор:
chmod 744 pktgen.conf-1-1
./pktgen.conf-1-1
В консоле появится:
Removing all devices
Adding eth1
Setting max_before_softirq 10000
Configuring /proc/net/pktgen/eth1
Running... ctrl^C to stop

Остановить генератор можно послав ctr+c в консоль, либо убив процесс echo, через kill.
Посмотреть результаты можно так:
#cat /proc/net/pktgen/eth1
После запуска генератора лампочки на интерфейсах начнут весело моргать, если запустить tcpdump на том же хосте, что и генератор, пакетов от сетевого адаптеры вы не увидите, так как они генерируются на уровне ядра и tcpdump не может их перехватить.

<Подвал>
Генератор пакетов, встроенный в ядро Linux. - Хорошее описание параметров, нюансов. Скрипты не рабочие в примере.
pktgen the linux packet generator.Autor:Robert Olsson,Uppsala Universitet & SLU - Вопросы мультипоточности + pktgen

Теги: linux, pktgen, генератор трафика

Эта утилита позволяет создавать и передавать пакеты через сетевой адаптер. Выберите в меню Инструменты => Генератор пакетов . Или, выбрав пакет в закладке Пакеты , щёлкните на нем правой кнопкой мыши, а затем выберите команду Отправить пакет .

Обратите внимание на то, что Генератор Пакетов не может и не должен быть использован для посылки пакетов с уровня приложений, то есть он не следит за инкрементом значений SEQ, ACK, значениями контрольных сумм, размерами пакетов и т. д. Если требуется переслать поток TCP, следует воспользоваться Winsock-приложением. Генератор Пакетов предназначен для воспроизведения уже захваченного трафика, тестирования брандмауэров и систем обнаружения вторжения, а так же для других целей, где требуется ручная обработка пакетов.

Генератор пакетов позволяет изменять содержимое пакета и одновременно показывать его в декодированном виде в левом окне. Можно создавать любые виды пактов, получая полный контроль над их содержимым. Для пакетов IP, TCP, UDP и ICMP контрольная сумма автоматически корректируется при нажатии на кнопку "сигма". Для помощи в редактировании пакета предусмотрен специальный модуль - Визуальный конструктор пакетов ; его можно вызвать, нажав на соответствующую кнопку.

Воспользуйтесь кнопкой (с изображенной на ней стрелкой) для получения списка доступных шаблонов пакетов. В программе есть шаблоны TCP , UDP и ICMP пакетов; их использование зачастую оказывается удобнее, чем ввод 16-ричных значений в окне редактора. Возможно, в шаблонах TCP-, UDP- и ICMP-пакетов вам потребуется изменить поля MAC- и IP- адреса, номера портов, SEQ- и ACK-номера и т. д. Вместо встроенных шаблонов можно использовать собственные, переместив пакет из закладки Пакеты в окно шаблона в Генераторе Пакетов . В случае переноса нескольких пакетов, только первый из них будет использован в качестве шаблона. В списке файлов шаблонов появится новый файл – New Template, который можно переименовать по правому щелчку мыши, выбрав Rename или удалить, выбрав Delete . После выбора шаблона, он будет загружен в окно редактора, где можно изменить содержимое пакета перед его отправкой.

Кроме того, можно скопировать произвольные файлы NCF в поддиректорию TEMPLATES. CommView будет отображать в списке шаблонов файл(ы) NCF, обнаруженные в поддиректории TEMPLATES. Если в файле NCF будет больше одного пакета – в качестве шаблона будет использован только первый пакет.

Ниже приведены параметры передачи:

Размер пакета – задать размер пакета.

Пакетов в секунду – установить частоту передачи пакетов. Будьте осторожны и не превышайте пропускную способность соединения! Попытка переслать 5000 раз в секунду пакеты длиной в 1000 байт превысит возможности 10Mbit-ного сетевого адаптера.

Непрерывно – включить режим непрерывной передачи, пока не нажмёте Остановить .

Количество раз – задать число отправок пакета в сеть.

Отправить/Остановить – возобновить/остановить передачу пакета.

Работа с несколькими пакетами одновременно

Генератор пакетов может передавать несколько пакетов одновременно. Выберите нужные вам пакеты из списка и правым щелчком мыши вызовите Генератор Пакетов . Кроме того, можно просто перетащить файл с пакетами (в любом поддерживаемом формате) в окно Генератора Пакетов . При работе в этом режиме декодер и редактор пакетов отключаются.

Сохранение отредактированных пакетов

Если вы отредактировали пакет и хотите его сохранить, просто перетащите мышью дерево декодера на рабочий стол или в любую папку. Будет создан новый файл в формате NCF с именем PACKET.NCF. Если требуется редактировать и посылать несколько пакетов – делайте это по очереди, вынося каждый пакет на рабочий стол и задавая ему новое имя. Затем откройте окно Просмотра Log-файлов , внесите в него отредактированные пакеты, выберите их и, удерживая клавишу Shift, активизируйте из контекстного меню Генератор Пакетов .

ВНИМАНИЕ:


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

К поддерживаемым протоколам относятся: Ethernet/802.3/LLC SNAP; VLAN (с поддержкой QinQ); ARP, IPv4, IPv6, IP-in-IP a.k.a IP Tunnelling (6over4, 4over6, 4over4, 6over6); TCP, UDP, ICMPv4, ICMPv6, IGMP, MLD; HTTP, SIP, RTSP, NNTP и многие другие.

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

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

Проект Ostinato предоставляет виртуальную машину Dron - собственно генератор, которую можно импортировать в GNS3 или UnetLab. Управление осуществляется через отдельный графический интерфейс, устанавливаемый под Windows

А GUI для Windows можно взять с официального сайта проекта

На текущий момент это версия 0.7.1. Версия GUI должна совпадать с версией дрона.

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

Развёртывание Ostinato в стенде

Из меню Actions –Nodes добавьте с стенд объект Ostinato и обязательно выберите как минимум два интерфейса при создании.


Один интерфейс e0 подключите через облако к pnet0. Это управляющий интерфейс, через который будет управляться трафик генератор с вашего клиентского PC.
Второй интерфейс e1 – подключите к стенду, например к коммутатору. Это интерфейс, который будет посылать генерированные пакеты. Если предполагается, что пакеты будут dot1Q, то интерфейс коммутатора, к которому подключен e1, переведите в транк, в противном случае – оставьте access.

Запускаем Ostinato


В приглашении ввести логин и пароль вводим tc без пароля и попадаем в linux-shell


Выполним команду ifconfig -a


Нас интересует интерфейс с именем cntl . Это интерфейс управления дроном. Дрон после запуска посылает DHCP запросы на данном интерфейсе на получения IP адреса. Если вы запускаете VM UNL под VmWare Workstation, с большой долей вероятности, дрон получит IP адрес автоматически, так как его интерфейс находится в той же сети, что и управляющий интерфейс UNL VM.

Но в случае, если это не произойдет, или ваша UNL VM работает под ESXi , то IP адрес на управляющий интерфейс дрона нужно назначить вручную. IP адрес должен быть из той же подсети, что и управляющий интерфейс UNL VM.

Sudo ifconfig cntl 172.16.1.90 netmask 255.255.255.0

Выполним еще раз команду ifconfig cntl


Мы назначили IP адрес на интерфейс cntl и проверили связность управляющим интерфейсом VM UNL. Теперь дрон готов к управлению.

Второй интерфейса eth0 внутри VM Ostinato виден как e1 в UNL – это порт который будет генерировать пакеты в соответствие требованиям поступающим через интерфейс управления.

Настройка графического интерфейса управления Ostinato.

На клиентском Windows PC запускаем файл ostinato.exe - это графического интерфейса управления GUI Ostinato.


После запуска, в верхнем левом окне мы видим портовую группу 0 от локального дрона. Нам она не нужна, так как мы будем использовать дрона в UNL. Поэтом просто удаляем ее.


Далее выбираем меню File – New Port Group. В появившимся окне вводим IP адрес управляющего интерфейса дрона и порт 7878 .


Нажимаем OK. Если все прошло хорошо в левом верхнем окне появиться Port Group 1, которая содержит один интерфейс дрона eth0.


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

Создание потока

В качестве примера создадим простой TCP SYN пакет. Наш поток будет состоять из 100 пакетов со скоростью 1 пакет в секунду.

Чтобы создать поток (Stream) сначала выберите соответствующий порт в портовой группе и затем выберите File – New Stream. В окне справа появиться новый поток. Изменим его имя на TCP.


Далее необходимо настроить все параметры нашего потока. Правкой кнопкой мыши нажимаем на имя потока и выбираем Edit Stream из контекстного меню


На этой странице (Protocol Selection) вы можете настроить длину фрэйма. Можно установить как фиксированное значение, так и переменное. Мы будем использовать фиксированное по умолчанию.


Далее настраиваем структуру пакета, составляя его из нужным нам протоколов. В качестве L3 выбираем IPv4, а в качестве L4 – TCP. Так как пакет TCP SYN, то для протокола L5 – выбираем None, и Payload – None.

Во вкладке Protocol Data настраиваем соответствующие заголовки. В Media Access Protocol настраиваем MAC адреса. В качестве SRC MAC поставим 5000.0002.00FF, а в качестве MAC DST - 5000.0002.0001.

В разделе IPv4 указываем IP адреса источника и приемника. Также можно указать фиксированный адрес и переменный. В случае переменного – IP адрес будет меняться в каждом посланном пакете.


В разделе Transmission Control Protocol указываем порты и флаги. Так как у нас TCP SYN пакет, выбираем соответствующий флажок.


Во вкладке Variable Fields можно указать дополнительные поля в пакете, который будут принимать переменные значения.


Во вкладке Stream Control указываем скорость генерации пакетов и их количество. Выберем генерировать 100 пакетов и скорость в 1 PPS.


Во вкладке Packet View – можно посмотреть результирующий пакет.

Теперь можно посмотреть как трафик попадает на коммутатор. UNetLab имеет возможность снимать дамп трафика в любой точке стенда и отправлять его в WireShark запущенный на локальном PC.


Выберем правой кнопкой мыши свитч SW1 и из контекстного меню выберем пункт Capture – e0/0 . При этом на локальном PC запуститься WireShark


Здесь мы можем увидеть наши сконструированные TCP SYN пакеты, которые поступают на порт E0/0 коммутатора SW1. Запустив на коммутаторе команду show mac address-table , видим, что SRC MAC адрес из нашего пакета изучен на порту коммутатора.

Что-то в последнее время прямо таки потянуло на генераторы трафика. Ну а что, программы хорошие. Позволяют выбрасывать пакеты с различными произвольными параметрами. А если направлять их куда-нибудь на файрволл, то можно следить за тем, как он их фильтрует или меняет параметры.

Программа называется Colasoft Packet Builder. Работа с ним не отличается особой сложностью, если вы смотрели предыдущие статьи на эту тему, наверняка разберетесь. Итак, вот внешний вид программы:

Нажимаем кнопку Add, выбираем тип пакета ARP, IP, TCP, UDP… не так много протоколов, но для начала этого хватит.

Вот например создаем TCP-пакет. К сожалению номера портов почему-то не редактируются напрямую. Но можно поменять значение в шестнадцатиричном редакторе пакета внизу (придётся вспоминать HEX или пользоваться калькулятором).


Так же не забываем выбрать адаптер, с которого будет уходить пакет. Для того, чтобы кнопки “Send” стали активными, нужно выбрать пакет в правой части экрана.

При нажатии на кнопку Send мы увидим окно передачи, в котором можно настроить режим отправки – всплеск – все пакеты разом, либо циклическая отправка. Количество циклов и пауза между ними. Например, нам нужно сделать отправку ежесекундного пакета, тогда ставим 0 (бесконечный цикл), а Delay выставляем в 1000. Если же нужно сделать шум примерно в минуту, за которую передать 6000 пакетов, то ставим 6000, и паузу в 10 миллисекунд.


Я немного поменял пакет, выставил IP-адреса источника и назначения, а так же порты. И вот что перехвачено в WireShark. Как видим, все на первый взгляд нормально!


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



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: