<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Проблема с подсчетом контрольной суммы TCP/UDP-заголовков</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html</link>
    <description>Здравствуйте, дорогие участники форума!&lt;br&gt;&lt;br&gt;Недвно у меня возникла необходимость работы с низкоуровневыми (сырыми) сокетами в ОС Linux.&lt;br&gt;Для начала написал парочку простеньких приложений, одним из которых является генератор SYN-пакетов протокола TCP. При тестировании программы заметил, что от машины, на адрес которой высылается пакет, не приходит никакого ответа. Стал разбираться и обнаружил, что монитор сетевого трафика wireShark забраковывает контрольную сумму TCP-заголовка отправляемого пакета, что может говорить о том, что на удаленной машине пакет молча уничтожается вследствие обнаружения неправильной контрольной суммы на приеме.&lt;br&gt;&lt;br&gt;Ниже привожу кусок кода, относящийся к рассчету КС:&lt;br&gt;&lt;br&gt;Функция рассчета КС:&lt;br&gt;&lt;br&gt;unsigned short csum (unsigned short *buf, int nwords) &lt;br&gt;&#123;&lt;br&gt;  unsigned long sum;&lt;br&gt;  for (sum = 0; nwords &amp;gt; 0; nwords--)&lt;br&gt;  sum += *buf++;&lt;br&gt;  sum = (sum &amp;gt;&amp;gt; 16) + (sum &amp; 0xffff);&lt;br&gt;  sum += (sum &amp;gt;&amp;gt; 16);&lt;br&gt;  return ~sum;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Проверял следующим образом. Брал массив из четного числа байтов, рассчитывал по</description>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (sd)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#37</link>
    <pubDate>Thu, 22 Dec 2016 19:22:47 GMT</pubDate>
    <description>&amp;gt;&amp;gt; код весь неправильный.&lt;br&gt;&amp;gt;&amp;gt; структура размещена неверно.&lt;br&gt;&amp;gt;&amp;gt; datagram с неправильным типом.&lt;br&gt;&amp;gt;&amp;gt; инициализация статики default &lt;br&gt;&amp;gt; ip. tcp выложи для полного кода-то &lt;br&gt;&lt;br&gt;htons правильно отрабатывает в рамках текущего примера. используется ntohs&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (sd)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#36</link>
    <pubDate>Thu, 22 Dec 2016 19:19:43 GMT</pubDate>
    <description>&amp;gt; код весь неправильный.&lt;br&gt;&amp;gt; структура размещена неверно.&lt;br&gt;&amp;gt; datagram с неправильным типом.&lt;br&gt;&amp;gt; инициализация статики default &lt;br&gt;&lt;br&gt;ip. tcp выложи для полного кода-то&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (sd)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#35</link>
    <pubDate>Thu, 22 Dec 2016 19:18:37 GMT</pubDate>
    <description>код весь неправильный.&lt;br&gt;&lt;br&gt;структура размещена неверно.&lt;br&gt;datagram с неправильным типом.&lt;br&gt;&lt;br&gt;инициализация статики default&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (goodfornothing)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#34</link>
    <pubDate>Tue, 08 Mar 2011 15:51:02 GMT</pubDate>
    <description>gcc -ggdb -Wall &#096;libnet-config --defines&#096; &#096;libnet-config --libs&#096; timestamp.c -o timestamp&lt;br&gt;&lt;br&gt;А вот так собирает! Не понятно, в чем разница и что за ключи -ggdb -Wall???&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (goodfornothing)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#33</link>
    <pubDate>Tue, 08 Mar 2011 14:52:12 GMT</pubDate>
    <description>Попробовал поюзать библиотечку libnet.&lt;br&gt;Написал простенькую прогу, попробовал собрать:&lt;br&gt;&lt;br&gt;gcc timestamp.c -o timestamp&#096;libnet-config --defines&#096;&#096;libnet-config --libs&#096;&#096;libnet-config --cflags&#096;&lt;br&gt;&lt;br&gt;Выдает предупреждение и ошибку:&lt;br&gt;&lt;br&gt;&amp;lt;command-line&amp;gt;:0: warning: missing whitespace after the macro name&lt;br&gt;In file included from timestamp.c:1:&lt;br&gt;/usr/include/libnet.h:96: error: missing binary operator before token &quot;1&quot;&lt;br&gt;&lt;br&gt;Команды для сборки программы: использующей библиотеку libnet взял из одной статьи.&lt;br&gt;Подскажите, пожалуйста, что не так?&lt;br&gt; &lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (goodfornothing)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#32</link>
    <pubDate>Mon, 07 Mar 2011 19:55:33 GMT</pubDate>
    <description>Здравствуйте!&lt;br&gt;Отписываюсь по поводу решения проблемы с контрольной суммой TCP-заголовка. Заранее прошу прощения за столь долгую паузу в ответе.&lt;br&gt;&lt;br&gt;Итак, начнем.&lt;br&gt;Структура p_header. В ней, как верно заметил один из ответчиков, последнее поле должно иметь не тип int, а тип short. Отмечу, что на результат рассчета данная ошибка ни коем образом не влияет (если объект типа p_header правильно проинициализирован). Два лишних нулевых байта ни коим образом не влияют на результат. Таким образом, структура псевдозаголовка выглядит следующим образом:&lt;br&gt;&lt;br&gt;struct p_header &lt;br&gt;&#123;&lt;br&gt;  u_long s_addr;&lt;br&gt;  u_long d_addr;&lt;br&gt;  u_char zer0;&lt;br&gt;  u_char protocol;&lt;br&gt;  u_short lenght;&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;Теперь про инициализацию псевдозаголовка.&lt;br&gt;Вот изначальный вариант:&lt;br&gt;&lt;br&gt;pseudo-&amp;gt;s_addr = inet_addr (&quot;1.2.3.4&quot;);&lt;br&gt;pseudo-&amp;gt;d_addr = sin.sin_addr.s_addr;&lt;br&gt;pseudo-&amp;gt;protocol = 6;&lt;br&gt;pseudo-&amp;gt;lenght = 5; &lt;br&gt;&lt;br&gt;Ошибочка таится в последней строчке. Данное поле - длина tcp-заголовка в БАЙТАХ!!!&lt;br&gt;Таким образом, должно быть что-то вроде:&lt;br&gt;&lt;br&gt;pseudo-&amp;gt;lenght = htons((unsign</description>
</item>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (goodfornothing)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#31</link>
    <pubDate>Sat, 05 Mar 2011 11:59:18 GMT</pubDate>
    <description>Спасибо! Почитал, вроде бы то, что нужно!!!&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (pavlinux)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#30</link>
    <pubDate>Sat, 05 Mar 2011 09:59:52 GMT</pubDate>
    <description>&amp;gt; У меня к вам назрел еще один вопрос. Нет ли в Linux библиотечки, позволяющей &lt;br&gt;&lt;br&gt;libnet глянь &lt;br&gt;&lt;br&gt;http://libnet.sourceforge.net/libnet.html (это cтарый)&lt;br&gt;http://packetfactory.openwall.net/projects/libnet/ (это наследник, но тоже дохлый)&lt;br&gt;http://github.com/sam-github/libnet  (свежак)&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с подсчетом контрольной суммы TCP/UDP-заголовков (goodfornothing)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9038.html#29</link>
    <pubDate>Sat, 05 Mar 2011 07:27:53 GMT</pubDate>
    <description>Завтра напишу в чем была проблема с рассчетом КС. Про выравнивание писать даже нечего. Просто моя тупейшая ошибка.&lt;br&gt;&lt;br&gt;У меня к вам назрел еще один вопрос. Нет ли в Linux библиотечки, позволяющей работать с канальным уровнем стека протоколов TCP/IP??? То есть, очень хочется получить возможность формирования Ethernet-кадров вручную. В Windows такие штуки я вытворял с использованием библиотеки packet32.dll. Это нужно для решения одной задачки. Необходимо вложить в отправляемый пакет некую величину непосредственно перед отправкой пакета в сеть, а на приеме - изъять эту величину сразу же после приема пакета сетевой картой.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
