Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Контрольная сумма

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Чт Июл 14 2005 20:03    Заголовок сообщения: Контрольная сумма Ответить с цитатой

Простенький модуль для ядра линукса - хватать юдп-пакеты, идещие на определенный порт, и перекидывать на другой. Делается с помощью Netfilter'а. Проблема в том, что после изменения порта, требуется пересчитывать заново контрольную сумму udp, иначе пакет будет отброшен сетевой подсистемой, как бы сильно я ни жаждал его получить.

Сборная солянка из разных исходников, в результате которой я надеюсь получить контрольную сумму:
Код:
   struct iphdr *iph = (*pskb)->nh.iph;
   struct udphdr *uh = (*pskb)->h.uh;

   unsigned short size;
   int csum = 0;

   size = ntohs(uh->len);
   csum = csum_partial((char *)uh, size, 0); // Контрольная сумма заголовка юдп+данных

   uh->check = 0;
   uh->check = csum_tcpudp_magic(
      iph->saddr,
      iph->daddr,
      size,
      IPPROTO_UDP,
      csum); /* tcp or udp checksum */
   ip_send_check(iph); /* ip checksum */
   (*pskb)->csum = csum;


Но не работает - пакеты пропадают где-то на транспортном уровне (иногда вылетает сообщение UDP: short packet в dmesg). Может быть кто-то этим занимался/разбирался?
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Пт Июл 15 2005 16:44    Заголовок сообщения: Ответить с цитатой

Гм. И даже никаких use google мне никто не высказал. А зря: http://www.netfor2.com/udpsum.htm - первое, что выдал гугль на запрос "udp checksum". Cool
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Пт Июл 15 2005 16:47    Заголовок сообщения: Ответить с цитатой

Лучше всего поставте анализатор пакетов. Поможет.
По поводу CRC уровня UDP, TCP, ICMP (правда последний сканер показывает что не так происходит подсчёт).
считаеться следующим образом...
Подсчитываеться сумма, далее всё что больше СЛОВА (с лева от 2 байт). прибавляете ышо раз к младшим. Получаеться СЛОВО (два байта). Далее инвертируете. Получаеться ДОПОЛНЕНИЕ - это и есть CRC. Теперь что входит в подсчёт. Это длина данных, начинающаяся за IP заголовком, выравненная до СЛОВА нулевым байтом (если длина нечет). В контрольную сумму входит ПСЕВДО ЗАГОЛОВОК. Который состоит из...IP src, IP trg, длина блока данных, код протокола (UDP or TCP).

Примечание...
Для уровня UDP CRC сумма может ине считаться - тогда данное поле просто заполняете нулями.

более подробно ищите тут...

http://www.helloworld.ru/texts/comp/inet/ip/tcpip/udpspec.html

с уважением
_________________
(круглый)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Пт Июл 15 2005 16:49    Заголовок сообщения: Ответить с цитатой

сорьки...предложение
"Это длина данных, начинающаяся за IP заголовком"
читать как
"Это все Ваши данные, начинающаяся за IP заголовком"
_________________
(круглый)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Пт Июл 15 2005 19:20    Заголовок сообщения: Ответить с цитатой

На самом деле проблема крылась в чем-то еще...
То ли глюки у меня, то ли глюки в линуксе. Но skb->h.raw указывает вовсе не на заголовок транспортного уровня. Он указывает точно туда же, что и skb->nh.raw, то есть сетевой уровень.

Именно из-за этого я постоянно получал совершенно левые значения в полях заголовка udp, когда их осматривал.

Пришлось вручную сдвигать указатель на длину IP-заголовка.
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DmitryShm



Зарегистрирован: 17.11.2003
Сообщения: 211
Откуда: Казань

СообщениеДобавлено: Пт Июл 15 2005 23:17    Заголовок сообщения: дохлый форум Ответить с цитатой

Я уже писал что это дохлый форум. В качестве показателя -- только оние ответивший. Лично я уже хочу удалить ссылку на этот форум из "Избранных". Извини, дружище, но мне кажется, что тебе ответят на линуксовых форумах. Этот -- ни рыба ни мясо: одно словоблудство и понты с редкими включениями хороших ответов. CitForum -- отстой.

[Обращение к людям, подддерживающим этот форум: сами, наверное знаете, что этот форум -- отстой. Скажите дюдям, заинтересованном в его существовании, что от него ничего не останется, если не развивать его. Кстати, Php--- отстой. Лично рекоммендую что-то вроде ASP.NET. Если дальше все так и будет тухло, то я либо просто отсюда уйду, либо буду флеймить или атакую сайт (хотя это навряд ли, т.к. атаковать эту тухлятину нет никакого смысла -- все и так плохо)].
_________________
love IT
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...