LINUX.ORG.RU

Генерация сетевых пакетов


0

2

Всем привет.

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

В принципе, написать все это чудо не сложно. Уже нашел все нужные библиотеки. Но возникает вопрос - как тестировать получившегося монстра.

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

Собственно, два вопроса.

Как создать виртуальный сетевой интерфейс без привязки его к какому-либо железу?

Как генерировать пакеты для данного интерфейса? Нашел pktgen, но он слишком низкоуровневый, а мне бы генерировать пинги, http(s) запросы и т.д.

Буду благодарен за любую информацию.


Как создать виртуальный сетевой интерфейс без привязки его к какому-либо железу?

loopback не подойдет?

kulti ★★ ()
Ответ на: комментарий от kulti

Если использовать pktgen - то не подойдет. Ибо lo не воспринимается как ethernet device.

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

ksv ()
Ответ на: комментарий от const86

Сильный ход. Я надеялся на более простое решение, не требующее настройки виртуализации.

ksv ()

Как создать виртуальный сетевой интерфейс без привязки его к какому-либо железу?

tun/tap? Вернее, tap. Хоть опенвпном создавать, но наверняка есть способы проще. В гугле что-то находится на эту тему.

а мне бы генерировать пинги

man ping

http(s) запросы

man curl, wget, GET, whatever

и т.д.

man т.д. :)

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

> man curl, wget, GET, whatever

Злые вы :)

Для начала, адрес назначения может быть недоступен. Даже если доступен - все порты наверняка прикрыты. То есть, curl / wget / whatever будет доолго ждать ответа. Как минимум - секунду. Что может быть весьма и весьма долго (1000 запросов - 1000 секунд - грустно ждать 15 минут для выполнения простого теста).

Надеялся на приложение, которое просто отправляло бы пакеты-запросы, не ожидая ответов на них.

За tun / tap - спасибо, посмотрю.

ksv ()
Ответ на: комментарий от ksv

Надеялся на приложение, которое просто отправляло бы пакеты-запросы, не ожидая ответов на них.

Это как? Сначала должна установиться tcp-сессия(это уже надо и принимать пакеты и отправлять), приложение не может слать пакеты «просто так». Потом поставить виртуалку и гонять трафик это просто.

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

Ещё можешь завернуть трафик с реальной тачки себе, это iptables mirror или типа того делает.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

я склонаюсь к варианту замиррорить трафик со свитча или ещё откуда.

true_admin ★★★★★ ()
Ответ на: комментарий от ksv

>lo не воспринимается как ethernet device.

dummy же! modprobe dummy

Rost ★★★★★ ()

scapy уже посоветовали, подкину ещё libnet для генерации.

anonymous ()

Спасибо за отсылку к библиотекам. Выглядят подходящими под мои нужды.

PS Это только у меня сложилось такое мнение, что разработчики scapy больны C++-ом на голову? Перегрузка оператора деления... в таком контексте... это нечто.

ksv ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.