Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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". _________________ 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 |
|
Вернуться к началу |
|
|
|