<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2353839</guid>
        <pubDate>Tue, 01 Sep 2009 10:05:09 +0000</pubDate>
        <title>Приём UDP сообщений</title>
        <link>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2353839</link>
        <description><![CDATA[gabbear: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2353713'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>albom &#064; <time class="tag-quote__quoted-time" datetime="2009-09-01T13:02:11+04:00">01.09.09, 09:02</time></span><div class='quote '>Это к тому, что не root&#39;у нельзя биндить порт с номером меньше 1024. Изменение должно быть в виде ошибки в сервере при вызове bind().<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2353489'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>gabbear &#064; <time class="tag-quote__quoted-time" datetime="2009-09-01T06:42:04+00:00">01.09.09, 06:42</time></span><div class='quote '>А почему тогда сниффер эти пакеты ловит?</div></div>Потому что переводит карту в promiscuous режим и слушает весь сетевой поток, а не работает на уровне пакетов как firewall.</div></div><br>
Спасибо большое. Вчера тряс нашего админа на тему всяческих фаерволов и сетевых фильтров - убеждал, что нигде ничего. Но почему-то оказался включён фаервол. Заработало.]]></description>
        <author>gabbear</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2353713</guid>
        <pubDate>Tue, 01 Sep 2009 09:02:11 +0000</pubDate>
        <title>Приём UDP сообщений</title>
        <link>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2353713</link>
        <description><![CDATA[albom: Это к тому, что не root&#39;у нельзя биндить порт с номером меньше 1024. Изменение должно быть в виде ошибки в сервере при вызове bind().<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2353489'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>gabbear &#064; <time class="tag-quote__quoted-time" datetime="2009-09-01T06:42:04+00:00">01.09.09, 06:42</time></span><div class='quote '>А почему тогда сниффер эти пакеты ловит?</div></div>Потому что переводит карту в promiscuous режим и слушает весь сетевой поток, а не работает на уровне пакетов как firewall.]]></description>
        <author>albom</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2353489</guid>
        <pubDate>Tue, 01 Sep 2009 06:42:04 +0000</pubDate>
        <title>Приём UDP сообщений</title>
        <link>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2353489</link>
        <description><![CDATA[gabbear: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2353298'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>albom &#064; <time class="tag-quote__quoted-time" datetime="2009-08-31T19:35:48+00:00">31.08.09, 19:35</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2352958'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>gabbear &#064; <time class="tag-quote__quoted-time" datetime="2009-08-31T13:59:59+00:00">31.08.09, 13:59</time></span><div class='quote '>ICMP Destination unreachable (Host administratively prohibited)</div></div>Firewall</div></div><br>
Хм. А почему тогда сниффер эти пакеты ловит?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2353298'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>albom &#064; <time class="tag-quote__quoted-time" datetime="2009-08-31T19:35:48+00:00">31.08.09, 19:35</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2352958'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>gabbear &#064; <time class="tag-quote__quoted-time" datetime="2009-08-31T13:59:59+00:00">31.08.09, 13:59</time></span><div class='quote '>Поначалу грешил на порт, пробовал менять его на меньший и больший - ничего не меняется.</div></div>Должно менятся. Или ты сидишь по root&#39;ом?  :o</div></div><br>
Пробовал и под рутом и без него - точно так же пакеты идут, сниффер их ловит, ICMP ответ уходит, сервер ничего не видит.]]></description>
        <author>gabbear</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2353298</guid>
        <pubDate>Mon, 31 Aug 2009 19:35:48 +0000</pubDate>
        <title>Приём UDP сообщений</title>
        <link>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2353298</link>
        <description><![CDATA[albom: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2352958'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>gabbear &#064; <time class="tag-quote__quoted-time" datetime="2009-08-31T13:59:59+00:00">31.08.09, 13:59</time></span><div class='quote '>ICMP Destination unreachable (Host administratively prohibited)</div></div>Firewall<br>
<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2352958'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>gabbear &#064; <time class="tag-quote__quoted-time" datetime="2009-08-31T13:59:59+00:00">31.08.09, 13:59</time></span><div class='quote '><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">/* Биндим сокет */</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script></div></div>Для клиента это лишнее. <br>
<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=280749&view=findpost&p=2352958'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>gabbear &#064; <time class="tag-quote__quoted-time" datetime="2009-08-31T13:59:59+00:00">31.08.09, 13:59</time></span><div class='quote '>Поначалу грешил на порт, пробовал менять его на меньший и больший - ничего не меняется.</div></div>Должно менятся. Или ты сидишь по root&#39;ом?  :o]]></description>
        <author>albom</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2352958</guid>
        <pubDate>Mon, 31 Aug 2009 13:59:59 +0000</pubDate>
        <title>Приём UDP сообщений</title>
        <link>https://forum.sources.ru/index.php?showtopic=280749&amp;view=findpost&amp;p=2352958</link>
        <description><![CDATA[gabbear: Доброго всем времени суток&#33;<br>
<br>
Есть программа-клиент, отправляющая мне с удалённого компа UDP сообщения, и есть программа-сервер на моём компе, которая должна их ловить. Если верить снифферу, то пакеты успешно до меня доходят, отправителю тут же возвращают ICMP Destination unreachable (Host administratively prohibited), но программа-сервер ничего не получает.<br>
<br>
Когда я тестировал ту же программу на локальном хосте (и сервер и клиент), всё работало. В чём может быть дело? Может кто-то сталкивался или просто догадывается?<br>
<br>
Код программы-клиента:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;stdlib.h&#62;</div><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &#60;errno.h&#62;</div><div class="code_line">#include &#60;sys/types.h&#62;</div><div class="code_line">#include &#60;sys/socket.h&#62;</div><div class="code_line">#include &#60;netinet/in.h&#62;</div><div class="code_line">#include &#60;arpa/inet.h&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">#include &quot;string.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">int main(int argc, char** argv) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int m_sock; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // дескриптор сокета</div><div class="code_line">&nbsp;&nbsp; &nbsp;sockaddr_in m_addr; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // переменная адреса интерфейса</div><div class="code_line">&nbsp;&nbsp; &nbsp;sockaddr_in s_addr; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // переменная адреса получателя</div><div class="code_line">&nbsp;&nbsp; &nbsp;string my_addr = &quot;192.168.0.211&quot;;// Адрес локального интерфейса</div><div class="code_line">&nbsp;&nbsp; &nbsp;string ip_addr = &quot;192.168.0.90&quot;;// Адрес получателя</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Создание сокета и присвоение значения дескриптору сокета для UDP пакетов</div><div class="code_line">&nbsp;&nbsp; &nbsp; * PF_INET &nbsp; &nbsp;- IP protocol family</div><div class="code_line">&nbsp;&nbsp; &nbsp; * SOCK_DGRAM - Raw protocol interface */</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ((m_sock = socket(PF_INET, SOCK_DGRAM, 0)) &#60; 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;socket&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Обнуляем переменную m_addr и забиваем её нужными значениями */</div><div class="code_line">&nbsp;&nbsp; &nbsp;bzero(&amp;m_addr, sizeof(m_addr));</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_addr.sin_family &nbsp; = AF_INET; &nbsp;// обязательно AF_INET!</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_addr.sin_port &nbsp; &nbsp; = htons(0); // 0 - выдать порт автоматом</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Переводим адрес в нужный нам формат */</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (inet_aton(my_addr.c_str(), &amp;m_addr.sin_addr) == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;inet_aton&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Биндим сокет */</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (bind(m_sock, (struct sockaddr*)&amp;m_addr, sizeof(m_addr)) &#60; 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;bind&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Обнуляем переменную s_addr и забиваем её нужными значениями */</div><div class="code_line">&nbsp;&nbsp; &nbsp;bzero(&amp;s_addr, sizeof(s_addr));</div><div class="code_line">&nbsp;&nbsp; &nbsp;s_addr.sin_family &nbsp; = AF_INET;</div><div class="code_line">&nbsp;&nbsp; &nbsp;s_addr.sin_port &nbsp; &nbsp; = htons(1024);</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Переводим адрес в нужный нам формат */</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (inet_aton(ip_addr.c_str(), &amp;s_addr.sin_addr) == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;inet_aton&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Засыпаем адресата пачкой пакетов */</div><div class="code_line">&nbsp;&nbsp; &nbsp;char msg[1024] = &quot;hey, hey baby! whoh-whah! i wanna kno-o-ow if you&#39;ll be my girl.&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (sendto(m_sock, msg, 1024, MSG_NOSIGNAL, (struct sockaddr*)&amp;s_addr, sizeof(s_addr)) &#60; 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;sendto&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sleep(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Закрываем сокет и выходим из программы */</div><div class="code_line">&nbsp;&nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (EXIT_SUCCESS);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Код программы-сервера:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;stdlib.h&#62;</div><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &#60;errno.h&#62;</div><div class="code_line">#include &#60;sys/types.h&#62;</div><div class="code_line">#include &#60;sys/socket.h&#62;</div><div class="code_line">#include &#60;netinet/in.h&#62;</div><div class="code_line">#include &#60;arpa/inet.h&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">#include &quot;string.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">int main(int argc, char** argv) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int m_sock; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // дескриптор сокета</div><div class="code_line">&nbsp;&nbsp; &nbsp;sockaddr_in m_addr; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // переменная адреса интерфейса</div><div class="code_line">&nbsp;&nbsp; &nbsp;string my_addr = &quot;192.168.0.90&quot;;// Адрес локального интерфейса</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Создание сокета и присвоение значения дескриптору сокета для UDP пакетов</div><div class="code_line">&nbsp;&nbsp; &nbsp; * PF_INET &nbsp; &nbsp;- IP protocol family</div><div class="code_line">&nbsp;&nbsp; &nbsp; * SOCK_DGRAM - Raw protocol interface */</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ((m_sock = socket(PF_INET, SOCK_DGRAM, 0)) &#60; 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;socket&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Обнуляем переменную m_addr и забиваем её нужными значениями */</div><div class="code_line">&nbsp;&nbsp; &nbsp;bzero(&amp;m_addr, sizeof(m_addr));</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_addr.sin_family &nbsp; = AF_INET; &nbsp;// обязательно AF_INET!</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_addr.sin_port &nbsp; &nbsp; = htons(1024); // 0 - выдать порт автоматом</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Переводим адрес в нужный нам формат */</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (inet_aton(my_addr.c_str(), &amp;m_addr.sin_addr) == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;inet_aton&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Биндим сокет */</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (bind(m_sock, (struct sockaddr*)&amp;m_addr, sizeof(m_addr)) &#60; 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;bind&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Получаем пакеты от отправителя */</div><div class="code_line">&nbsp;&nbsp; &nbsp;char recvline[1024];</div><div class="code_line">&nbsp;&nbsp; &nbsp;int bytesrecv;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if ((bytesrecv = recvfrom(m_sock, recvline, 1024, 0, (sockaddr*)NULL, NULL)) &#60; 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;perror(&quot;recvfrom&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;Message received! Size: %d\n&quot;, bytesrecv);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Закрываем сокет и выходим из программы */</div><div class="code_line">&nbsp;&nbsp; &nbsp;close(m_sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (EXIT_SUCCESS);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Ни единого recvfrom не произошло, хотя пришла уже не одна тысяча пакетов.<br>
<br>
Кусок лога WireShark, который повторяется каждую секунду:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>192.168.0.211 192.168.0.90 UDP Source port: 35160 Destination port: 1024<br>
192.168.0.90 192.168.0.211 ICMP Destination unreachable (Host administratively prohibited)</div></div><br>
<br>
PS:<br>
192.168.0.90 - ip моего компа<br>
192.168.0.211 - ip удалённой тачки<br>
Обмен данными производится через 1024 порт.<br>
<br>
PPS:<br>
Поначалу грешил на порт, пробовал менять его на меньший и больший - ничего не меняется.<br>
<br>
PPPS:<br>
Грешил на адрес интерфейса, пробовал делать my_addr.sin_addr.s_addr = htonl(INADDR_ANY) - тоже никакого эффекта.]]></description>
        <author>gabbear</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	