0 / 0 / 0
Регистрация: 08.01.2009
Сообщений: 4
1

PF_RING

08.01.2009, 22:22. Показов 7029. Ответов 20
Метки нет (Все метки)

Здравствуйте,
Кто нибудь использует PF_RING?

Хотелось бы обсудить пару проблем с этим модулем.
0
0 / 0 / 0
Регистрация: 17.01.2009
Сообщений: 3
17.01.2009, 14:55 2
Я активно пользую.
Что конкретно интерисует?
0
0 / 0 / 0
Регистрация: 08.01.2009
Сообщений: 4
17.01.2009, 15:28  [ТС] 3
Модуль работает хорошо, но при попытки удалить модуль из системы:
rmmod ring
кернел выводит кучу ошибок с памятью и умирает.

Система: Intel Xeon quad core.
Кернел скомпилирован для плаформы: Newer Xeon / Core Duo, 2.6.28


Сейчас я поставил более старый кернел, Generic x86, 2.6.24.7
И более мене работает стабильно, хотя пару раз вылетал с похожими ошибками с памятью.

PF_RING используеться черзе libpcap-pfring, со сниффером gulp.

С чем-то подобным не сталкивался?
0
0 / 0 / 0
Регистрация: 17.01.2009
Сообщений: 3
20.01.2009, 22:13 4
Данна проблема не встречалась мне на ядрах до 2.6.27
В более новых ядрах немного поправили структуры для работы с сетью, и теперь модуль нормально грузиться выгружаеться, но если начать ловлю пакетов, то минут через 5-7 система виснет намертво. Поэтому я вернулся на ядро серии 2.6.х. Там проблем нету.
Да и починить времени пока нет.
Кстати проверял на HP-360 с 2 Ксеонами по 4 ядра.
ИМХО: сыроват он пока для ядер >=2.6.27
0
0 / 0 / 0
Регистрация: 17.11.2008
Сообщений: 33
05.03.2009, 12:20 5
Где можно скачать документацию по PF_RING или сам архив с ним?
0
0 / 0 / 0
Регистрация: 17.01.2009
Сообщений: 3
05.03.2009, 21:32 6
Скачать архив не получится, он доступен только через svn, тпм же и дока, хотя она у них сильно запаздывает.

Вот ссылка:
http://www.ntop.org/PF_RING.html
0
0 / 0 / 0
Регистрация: 17.11.2008
Сообщений: 33
06.03.2009, 10:36 7
Угу, пасип видела ту статейку , если кого еще заинтересует нашла несколько документаций про такие методы :
http://bjou.homeunix.net/blog/... ian-sarge/
http://www.redsecure.ru/blog/t... w-analysis ( кстати на русском )

ну если кому поможет ))))
0
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 15
13.09.2011, 21:26 8
Доброе время суток. Хотел поинтересоваться, есть ли какая-либо взаимосвязь PF_RING c патчами к ядру Linux типа real time? (напр. проект RT Linux). Как написано в User guide, с 4ой версии изменения ядра не требуются. (Кстати, какого характера они были раньше? Не RT?). Но мой научный руководитель сказал, что для перехвата трафика с помощью PF_RING, мне потребуется RTLinux, и пока я не понимаю, зачем.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
14.09.2011, 09:50 9
Патчить ядро не требуется, т.к. начиная с 4й версии PF_RING собирается как модуль. При желании можете покопаться в svn.
Прямой связи между PF_RING и rt имхо нет, но появляется удобная возможность разнести ядро и юзерленд по cpu ну и заодно поднять приоритет снифера над другими процессами.
1
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 15
18.09.2011, 00:49 10
Спасибо!
У меня, как человека, впервые вникающего в эту тему есть ещё непонятные моменты..
Например, какими программами можно задать определенную нагрузку сети, чтобы потом определять эффективность сниффера отношением перехваченного трафика к этому заданному значению?
libpcap и PF_RING могут быть поставлены в произвольном порядке? От чего может зависеть эффективность перехвата на PF_RING + libpcap? Как можно было бы достичь максимальной эффективности?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
18.09.2011, 09:11 11
Если у вас сетевая карта для которой в PF_RING умеет DNA, то в комплекте с PF_RING есть утилита pfsend, иначе посмотрите на ядерный pktgen
Нет. Сначала PF_RING, затем libpcap. Подробности есть в документации PF_RING
Очень много факторов... Прежде всего железо. C хорошей картой, умеющей фильтровать трафик (например i82599) можно переварить 10Gib/s Карта попроще с DNA драйвером. Обычный драйвер, но вся логика фильтрации вынесена в ядро (PF_RING plugins). Опять же все есть в документации.
1
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 15
20.09.2011, 22:17 12
Мне удалось скомпилировать PF_RING по инструкции http://zhou-xingbo.iteye.com/blog/1002960, 12 и 13 пункт я пропустил. Но при попытке сделать make pf-aware драйвера (у меня tg3 от broadcom) получаю ошибку:

dcom/tg3/tg3-3.99k$ make
sh makeflags.sh /lib/modules/2.6.38-11-generic/build > tg3_flags.h
make -C /lib/modules/2.6.38-11-generic/build SUBDIRS=/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.38-11-generic'
CC [M] /home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.o
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c: In function ‘__tg3_set_rx_mode’:
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9088:16: error: ‘struct net_device’ has no member named ‘mc_count’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9100:27: error: ‘struct net_device’ has no member named ‘mc_list’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9100:55: error: ‘struct net_device’ has no member named ‘mc_count’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9101:28: error: dereferencing pointer to incomplete type
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9103:26: error: dereferencing pointer to incomplete type
make[2]: *** [/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.o] Ошибка 1
make[1]: *** [_module_/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.38-11-generic'
make: *** [default] Ошибка 2

С версией 3.102 так же. Каковы могут быть причина и решение?

Ещё вопрос. В инструкции, как обсуждалось выше, сказано, что не нужно перепатчивать ядро, а если перепатчить уже пропатченное ядро, то.. в общем, нехорошо будет. А вот если я буду ставить RTLinux, какие процедуры нужно выполнить перед установкой, чтобы установка прошла гладко? Может, есть мануал какой-нибудь по этой теме?

И последнее.. Какими программами я могу задать на сеть заданную нагрузку, чтобы, зная заранее количество трафика, узнать, какая часть его будет перехвачена?
Ядро- 2.6.38-11-generic. (Ubuntu 11.04)
Заранее благодарен.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
21.09.2011, 12:42 13
Цитата Сообщение от Fellander Посмотреть сообщение
С версией 3.102 так же. Каковы могут быть причина и решение?
Если правильно помню, mc_list в старых ядрах было списком MAC адресов девайса для мультикаста, сейчас оно вынесено в отдельную структуру struct netdev_hw_addr_list и есть стандартные макросы для работы с этой структурой.
Решениея:
плакать в рассылку ntop
патчить драйвер своими силами
купить карточку от intel

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

Добавлено через 2 часа 15 минут
В обед запинал драйвер под сборку на свежих ядрах.
Но такой карты у меня нет и соответственно работает или нет сказать не могу(
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
diff -ur tg3-3.99k.orig/tg3.c tg3-3.99k/tg3.c
--- tg3-3.99k.orig/tg3.c    2011-09-21 10:23:23.000000000 +0400
+++ tg3-3.99k/tg3.c 2011-09-21 13:32:27.456047850 +0400
@@ -9085,22 +9085,19 @@
    } else if (dev->flags & IFF_ALLMULTI) {
        /* Accept all multicast. */
        tg3_set_multi (tp, 1);
-   } else if (dev->mc_count < 1) {
+   } else if (netdev_mc_empty(dev)) {
        /* Reject all multicast. */
        tg3_set_multi (tp, 0);
    } else {
        /* Accept one or more multicast(s). */
-       struct dev_mc_list *mclist;
-       unsigned int i;
+       struct netdev_hw_addr *ha;
        u32 mc_filter[4] = { 0, };
        u32 regidx;
        u32 bit;
        u32 crc;
 
-       for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
-            i++, mclist = mclist->next) {
-
-           crc = calc_crc (mclist->dmi_addr, ETH_ALEN);
+       netdev_for_each_mc_addr(ha, dev) {
+           crc = calc_crc (ha->addr, ETH_ALEN);
            bit = ~crc & 0x7f;
            regidx = (bit & 0x60) >> 5;
            bit &= 0x1f;
1
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 15
21.09.2011, 22:43 14
Длинный лог ошибок, начало которого вот dcom/tg3/tg3-3.99k$ make
sh makeflags.sh /lib/modules/2.6.38-11-generic/build > tg3_flags.h
make -C /lib/modules/2.6.38-11-generic/build SUBDIRS=/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.38-11-generic'
CC [M] /home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.o
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c: In function ‘__tg3_set_rx_mode’:
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9088:9: error: expected expression before ‘}’ token
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9088:23: error: ‘struct net_device’ has no member named ‘mc_count’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9089:9: error: expected expression before ‘}’ token
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9094:17: error: expected expression before ‘struct’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9095:17: error: expected expression before ‘unsigned’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9096:17: error: expected expression before ‘struct’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9097:17: warning: ISO C90 forbids mixed declarations and code
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9102:17: error: expected expression before ‘for’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9100:21: warning: unused variable ‘crc’
/home/eborzov/Загрузки/PF_RING-5.0.0/drivers/PF_RING_aware/broadcom/tg3/tg3-3.99k/tg3.c:9099:21: warning: unused variable ‘bit’

И на 9106 строке (26 у вас) не понял, чем уравновешивается открытая тут вами одиночная скобка.

Cпасибо за помощь, в любом случае завтра куплю карточку Intel, заодно ради DNA.
Не сразу понял в прошлый раз, что pktgen относится к вопросу о генерации трафика, извиняюсь. Огромное спасибо.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
21.09.2011, 22:52 15
Цитата Сообщение от Fellander Посмотреть сообщение
И на 9106 строке (26 у вас) не понял, чем уравновешивается открытая тут вами одиночная скобка.
Эмм... man patch?
Это был diff -ur old new
Соответственно закрывающая скобочка остается от цикла for () {
К сожалению, я не нашел как на форуме прикрепить файл/тега diff и возможно форум что-то побил. Если хотитет - довайте e-mail, скину патч туда. Работает или нет я хз, но собирается 100%.
Цитата Сообщение от Fellander Посмотреть сообщение
Cпасибо за помощь, в любом случае завтра куплю карточку Intel, заодно ради DNA.
Правильное решение, наверное это самый дешевый способ обрабатывать >= гигабита.

Up: про патч, давайте не "если хотите", а все-таки попробуем запинать это дело? Если выгорит - отправим в ntop, доброе дело сделаем...
2
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 15
22.09.2011, 21:27 16
Система полностью собралась благодаря присланному вами патчу! Драйвер собрался и работает. Во всяком случае, страницу веб-интерфейса с локального адреса загрузил.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
23.09.2011, 08:27 17
Цитата Сообщение от Fellander Посмотреть сообщение
Драйвер собрался и работает. Во всяком случае, страницу веб-интерфейса с локального адреса загрузил.
Если возможно, проверьте снифинг мультикаст трафика. По идее это единственное, что могло поломаться...
0
0 / 0 / 0
Регистрация: 08.07.2009
Сообщений: 10
28.12.2011, 19:47 18
Всем привет

Такой вопрос : Имеет ли DNA поддержку очередей ( типа TNAPI с ixgbe драйвером).
0
svetocopy
17.01.2013, 11:24 19
Цитата Сообщение от rulik00 Посмотреть сообщение
Я активно пользую.
Что конкретно интерисует?
помогите пожалуйста установить pf_ring на ubuntu.
я скачал deb пакет и установил через ubuntu software center, что дальше?
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 15
17.01.2013, 13:52 20
Я устанавливал стандартным способом. Первоисточник: http://www.ntop.org/pf_ring/in... r-pf_ring/
В вольном изложении:
1. Скачивал PF_Ring через SVN или просто копировал папку отсюда: http://sourceforge.net/project... s/PF_RING/
Будем считать, что скопировали её в домашнюю директорию.
2. Командой ethtool -i eth0 (вместо 0 может быть другой номер) узнать версию драйвера сетевой карты.
Для работы с модулем необходим модифицированный драйвер. Такие драйверы находятся в папке с PF_RING в drivers/PF_Ring aware (или DNA, если вы именно её хотите использовать). Посмотрите, чтобы там был тот драйвер, который вам выдает ethtool. Как видно из диалога выше, лично у меня возникали проблемы с broadcomовскими драйверами, но использование интеловских прошло на ура. (в частности, e1000e, e1000). Если не нашли тут свой драйвер- упс.
3. Отключаете текущий драйвер. Предположим, он называется e1000e. Можете перед отключением посмотреть точное его название, версию итд в ethtools, чтобы (мало ли каким образом) не перепутать с модифицированным в дальнейшем.
sudo rmmod e1000e
4. Переходите в директорию PF_Ring, которую скачали:
cd PF_RING/kernel (или, понятно, может быть в вашем случае что-то вроде cd PF_RING-5.5.2/kernel)
5. Выполнить команду make. Производитель отмечает, что именно make, а не sudo make, т.к. иначе возможны ошибки. У меня чаще всего получалось так, но были случаи, когда как раз make не работал, делал таки sudo make.
6. sudo make install
7. cd ../userland/lib Переходим в директорию с библиотеками. По инструкции дальше сразу make, но у меня понадобилось сначала:
8. ./configure
9. make
10. sudo make install
11. cd ../libpcap-1.1.1-ring/ переходим в директорию с модифицированной libpcap. (В инструкции cd ../libpcap-1.0.0-ring/ - название директории сменилось)
12. ./drivers/PF_RING_aware/intel/e1000e-2.0.0.1/src
16. make
17. sudo make install
Далее нужно активировать PF_Ring. Дальнейшие действия нужно выполнять после перезагрузки каждый раз, если вы не автоматизируете процесс. (вообще говоря, модуль PF_Ring у меня стартовал сам при запуске модифицированного tcpdump, но так вы и режим не выбираете, а модифицированный драйвер нужно следить чтобы был загружен каждый раз при работе с PF_Ring).
cd /lib/modules/2.6.31-14-generic/kernel/net/pf_ring
Здесь в директории modules нужно выбрать ту версию ядра, которая используется у вас. Там может быть несколько папок, выберите ту, которая соответствует используемой в данной момент версии. Версию ядра можно посмотреть командой uname -r
18. Если по какой-то причине уже был загружен модуль, а вам нужно, к примеру, поменять режим, нужно модуль сначала выгрузить командой sudo rmmod pf_ring (предварительно убив использующие его процессы)
19. sudo insmod pf_ring.ko transparent_mode=1 Возможно три значения transparent_mode. о них тут: http://www.ntop.org/pf_ring/pf... rent-mode/
20. cd /lib/modules/2.6.31-14-generic/kernel/drivers/net/e1000e Аналогично, тут в modules нужно выбрать вашу директорию. И путь к моулю драйвера может отличаться. В моём случае это могли быть такие варианты:
cd /lib/modules/2.6.31-14-generic/kernel/drivers/net/ethernet/intel/e1000e
cd /lib/modules/2.6.31-14-generic/kernel/drivers/net/intel/e1000
Поищите, и найдете.
21. Активируйте модифицированный драйвер.
sudo insmod e1000e.ko

Это все. Конечно, вам нужен модифицированный софт и работа с версией libpcap именно от разработчиков PF_Ring. Перед установкой рекомендуют удалить текущий libpcap и программы (типа tcpdump), его использующие. Видимо, чтобы не перепутать. Но на самом деле два libpcap могут существовать вместе. Кстати при удалении стандартного libpcap он может потянуть за собой демон pppd, и отвалится интернет.
Для работы, например, модифицированного tcpdump, который можно найти в директории userland в папке PF_Ring, нужно, понятно, выполнить стандартные make, sudo make install и запускать tcpdump из этой директории ./tcpdump, если стоит ещё и другой, но другой стоит удалить. Проверить, какими библиотеками пользуется та или иная программа можно так:
which <название программы>
выведется путь, далее
ldd <путь к программе из прошлого пункта>
Выведется список библиотек, если там фигурирует libpcap 0.8, например, то вы сидите на стандартном libpcap.
В случае применения ldd на модифицированный tcpdump строчки libpcap не увидите вовсе- использование модифицированного libpcap там прописано статически.
Ну и чтобы оценить эффективность PF_Ring, рекомендуется использовать tcpdump -n -i eth1 -w /dev/null
http://www.y-d-art.ru/articles... fring.html
Вывод на /dev/null покажет вам работу именно сетевой подсистемы. (Если отправите некое количество пакетов и посчитаете количество перехваченных). В моем случае на небольшой скорости потери пакетов остались практически такими же, т.к., кажется, они уже происходили на уровне файловой системы, а на чистом linux tcpdump -n -i eth1 -w /dev/null также показывало 100%, и в этом случае, мое предположение, PF_Ring ни к чему.
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru