| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > пользовательские данные, sk_buff |
| Автор: bodigard 11.9.2013, 09:58 | ||||||||||
| Доброго времени суток, помогите плиз разовбраться как правильно получить доступ к данным пользователя в sk_buff. есть модуль фильтрации http трафика и работал он прекрасно, но понадобилось перенести на другой сервер, в результате код работающий на 1ном железе перестал работать на другом :( Так как прошлый сервер благополучно переустановили то сравнивать можно лишь с виртуалкой, версии ОС и библиотек идентичны на виртуалке и на железном сервере. на виртуалке получаю данные пользовалетя так
работает прекрасно, см результат 2 если тоже самое сделать на железном сервере то получу результат 1 далее, на железном сервере вставляю мощьный костыль в виде копирования sk_buff посредством skb_copy и получаю правельный результат, результат 2. но от этого костыля очень хочеться уйти ... есть подозрение что на железном сервере каким-то образом в памяти фрагментируется sk_buff, но как правильно к этому подойти ума не приложу :( вот кусок кода (за стиль извиняюсь, переписывал его раз на 20ть по разному, но работает только этот, с копированием)
так регестрирую функцию
Результат 1
Результат 2
Заранее благодарен ! С уважением. |
| Автор: borisbn 11.9.2013, 15:31 |
| Может данные по указателю skb перетираются в другом потоке ? А если быстренько скопировать данные, то перетирание исходных на это не влияет... Попробуй перед копированием вставить задержку - если увидишь битые данные и в копии, то это подтвердит мои слова |
| Автор: feodorv 12.9.2013, 03:48 | ||
http://www.rt-embedded.com/blog/archives/using-linux-netfilter-framewor/, что в структуре
может быть ещё одно поле owner, которое Вы не инициализируете. Когда это поле добавилось, я не знаю, но на новеньком сервере оно вполне может иметь место. В добавок: Это самоубийство... Добавлено через 7 минут и 35 секунд К тому же лучше пользоваться функциями ip_hdr, skb_network_header, ip_hdrlen etc (например, в заголовке IP могут присутствовать опции). |
| Автор: feodorv 12.9.2013, 04:11 | ||
Вот http://people.cs.clemson.edu/~westall/853/notes/netfilter.pdf так написано:
|
| Автор: feodorv 12.9.2013, 17:42 | ||
Я, в сущности, иное имел в виду Если в данных user_data_ptr отсутствует '\0', то Вы уезжаете за пределы предоставленных данных.... А так не годится?
|
| Автор: bodigard 13.9.2013, 07:50 |
каюсь, запамятовал, спасибо что напомнили почему-же, вполне , только проблема у меня не с заголовками, а с содержимым, что идёт после заголовков ... |
| Автор: feodorv 13.9.2013, 23:48 |
| owner не помог? |
| Автор: bodigard 16.9.2013, 06:15 |
нет к сожалению. проблема видимо глубже, хотя думаю что ядро не зря фрагментирует пакеты, осталось понять зачем оно это делает и какая в этом выгода ... |
| Автор: feodorv 16.9.2013, 17:01 | ||
А я думал, что речь идёт об IP-фрагментах, а не о фрагментах Netfilter-данных... |