Трафик генератор 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 (который, к сожалению, почему-то не всегда работает нормально). Это всё дело привычки. С поставленными задачами (тривиальными конфигурациями для тестов) каждый из них справляется отлично.