<?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=118655&amp;view=findpost&amp;p=900149</guid>
        <pubDate>Sat, 29 Oct 2005 13:59:10 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=900149</link>
        <description><![CDATA[MinLexx: Не хочу плодить темы..... <br>Короче понял я, толковый сниффер на Винапи/Винсок не напишешь, тут нужен WinPcap.<br>Ну, покопал я WinPcap, посмотрел примерчики - прикольно, этот WinPcap ловит пакеты на уровне Ethernet&#33;&#33;&#33; :)<br>Я даже смог разобрать заголовки Ethernet, IP, UDP, ... :)<br><br>Короче, новая задача есть. В некоторой сети между сегментами не проходят UDP-пакеты (фильтруются на роутере). А надо сделать так, чтобы UDP-пакеты могли перемещаться от компа к компу за пределы сегментов. Однако, протокол TCP разрешён...<br><br>Вариант решения таков: создать TCP туннель для связи нескольких компьютеров... На одном из компов запущен сервер, соединяющий клиентов. На компах, которые хотят связаться через UDP, запущены клиенты - клиенты соединяются с сервером по TCP. Клиент представляет из себя сниффер UDP-пакетов... Когда комп отправляет UDP пакет, клиент его прослушивает, записывает и запихивает в TCP-пакет, отсылает серверу. Далее, сервер, получая от клиента пакет, персылает его всем остальным клиентам. Клиенты, получившие такие пакеты, должны отправить их в свою подсеть.... Так, как будто они пришли из другой подсети (можно туннелировать ВЕСЬ IP-пакет, не проблема ;) ), не изменяя адреса отправителя/получателя, вообще не изменяя пакет...<br><br>Внимание ВОПРОС<br><br>Можно ли отправить пакет в сеть так, чтобы он вернулся из сети на свою же машину, будто посланный из сети?<br><br>Допустим, комп из одной подсети шлёт UDP-пакет 10.70.24.60:6111 -&gt; 255.255.255.255:6111<br>Сниффер-клиент на нём запущенный, перехватывает этот пакет, шлёт по TCP серверу, сервер пересылает пакет компьютеру в другой сети, напиример, 10.70.18.4. Клиент на 2м компе, 10.70.18.4, Получает от сервера этот пакет в TCP-пакете. Далее, задача: послать этот UDP-пакет, взятый из TCP-пакета, самому себе, так, как будто он пришёл из сети извне. ТАКОЕ ВОЗМОЖНО???? <br>Т.е. в данном примере, комп 10.70.18.4 должен получить броадкаст-UDP пакет от 10.70.24.60:6111...<br><br> :wall:  :whistle:<br><br>Как это сделать?  :unsure:]]></description>
        <author>MinLexx</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=890894</guid>
        <pubDate>Wed, 19 Oct 2005 22:29:12 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=890894</link>
        <description><![CDATA[artalex: <strong class='tag-b'>cozy</strong><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Извиняюсь, код не мой.</div></div><br>
Знаю.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>В принципе, код свою работу делает,</div></div><br>
У меня TTL не печатал, так я эту ошибку и обнаружил  :wall:]]></description>
        <author>artalex</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889750</guid>
        <pubDate>Tue, 18 Oct 2005 23:41:37 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889750</link>
        <description><![CDATA[cozy: Извиняюсь, код не мой. <br>Copy&#39;n&#39;paste. :)<br><br>В принципе, код свою работу делает,<br>а исправить эту ошибку надеюсь труда не составит?]]></description>
        <author>cozy</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889728</guid>
        <pubDate>Tue, 18 Oct 2005 21:51:15 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889728</link>
        <description><![CDATA[artalex: <strong class='tag-b'>cozy</strong><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Посмотри это</div></div><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">printf(&quot;%s&quot;,itoa(hibyte,&quot;&quot;,10));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^^ - как такое можно было написать ?</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>artalex</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889713</guid>
        <pubDate>Tue, 18 Oct 2005 21:20:05 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889713</link>
        <description><![CDATA[MinLexx: Интересно где это про такие вот мелочи жизни литературу почитать можно? И почему константа SIO_RCVALL не определена стандартно? Почему в MSDN ничего нет толкового на эту тему?  :wacko:  :wall:]]></description>
        <author>MinLexx</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889703</guid>
        <pubDate>Tue, 18 Oct 2005 21:09:49 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889703</link>
        <description><![CDATA[LuckLess: <strong class='tag-b'>MinLexx</strong><br>
Специфика SIO_RCVALL в том , что он срабатывает , но ioctlsocket возвращает ошибку.]]></description>
        <author>LuckLess</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889698</guid>
        <pubDate>Tue, 18 Oct 2005 21:02:52 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889698</link>
        <description><![CDATA[MinLexx: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>MSDN</span><div class='quote '>Return Values<br>
Upon successful completion, the ioctlsocket returns zero. Otherwise, a value of SOCKET_ERROR is returned.</div></div><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">//SIO_RCVALL</div><div class="code_line">DWORD d = 1;</div><div class="code_line">if(ioctlsocket(s, SIO_RCVALL, &amp;d) == SOCKET_ERROR)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Log(&quot;NT: ERROR: ioctlsocket(... SIO_RCVALL ...) set failed.&quot;);</div><div class="code_line">}</div></ol></div></div></div></div><br>
выводит на экран это сообщение. Хотя последующий вызов recvfrom() успешен...<br>
<br>
Твой код, конечно, короткий, но он не проверяет ни одно возвращаемое значение...]]></description>
        <author>MinLexx</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889683</guid>
        <pubDate>Tue, 18 Oct 2005 20:39:53 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889683</link>
        <description><![CDATA[LuckLess: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=118655&view=findpost&p=889680'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MinLexx &#064; <time class="tag-quote__quoted-time" datetime="2005-10-18T20:36:16+00:00">18.10.05, 20:36</time></span><div class='quote '>Видимо быстрый у Вас инет) Шустро тыкаете по кнопочке &quot;Поиск&quot;.  </div></div><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;iostream&#62;</div><div class="code_line">#include &#60;winsock2.h&#62;</div><div class="code_line">#include &#60;ws2tcpip.h&#62;</div><div class="code_line">#define SIO_RCVALL 0x98000001</div><div class="code_line">#pragma comment(lib,&quot;ws2_32.lib&quot;)</div><div class="code_line">void main(void){</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSADATA wsa;</div><div class="code_line">WSAStartup(MAKEWORD(2,2),&amp;wsa);</div><div class="code_line">SOCKET s = socket(AF_INET,SOCK_RAW,IPPROTO_IP);</div><div class="code_line">sockaddr_in adr = {AF_INET , INADDR_ANY , 0 , 0};</div><div class="code_line">&nbsp;&nbsp; &nbsp;bind(s,(sockaddr*)&amp;adr,sizeof(sockaddr_in));</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD d =1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ioctlsocket(s,SIO_RCVALL,&amp;d);</div><div class="code_line">&nbsp;&nbsp; &nbsp;char buff[2000]={0};</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (recv(s,buff,2000,0)!=SOCKET_ERROR){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;in_addr ip1 , ip2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ip1.S_un.S_addr = *((int*)(buff+12));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ip2.S_un.S_addr = *((int*)(buff+16));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;user &quot; &#60;&#60; inet_ntoa(ip1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60;&quot; shlot chtoto user-u &quot; &#60;&#60;inet_ntoa(ip2) &#60;&#60;&quot;\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60;&quot;Error N:&quot; &#60;&#60; WSAGetLastError();</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>LuckLess</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889680</guid>
        <pubDate>Tue, 18 Oct 2005 20:36:16 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889680</link>
        <description><![CDATA[MinLexx: Видимо быстрый у Вас инет) Шустро тыкаете по кнопочке &quot;Поиск&quot;.  :D <br>ФФсем спасип... буду копать.....]]></description>
        <author>MinLexx</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889675</guid>
        <pubDate>Tue, 18 Oct 2005 20:24:41 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889675</link>
        <description><![CDATA[LuckLess: <strong class='tag-b'>MinLexx</strong><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;iostream&#62;</div><div class="code_line">#include &#60;winsock2.h&#62;</div><div class="code_line">#include &#60;ws2tcpip.h&#62;</div><div class="code_line">#include &#60;conio.h&#62;</div><div class="code_line">#define SIO_RCVALL 0x98000001</div><div class="code_line">#pragma comment(lib,&quot;ws2_32.lib&quot;)</div><div class="code_line">void main(void){</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSADATA wsa;</div><div class="code_line">WSAStartup(MAKEWORD(2,2),&amp;wsa);</div><div class="code_line">SOCKET s = socket(AF_INET,SOCK_RAW,IPPROTO_IP);</div><div class="code_line">&nbsp;&nbsp; &nbsp;sockaddr_in adr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(&amp;adr,0,sizeof(sockaddr_in));</div><div class="code_line">&nbsp;&nbsp; &nbsp;adr.sin_addr.s_addr = INADDR_ANY;</div><div class="code_line">&nbsp;&nbsp; &nbsp;adr.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bind(s,(sockaddr*)&amp;adr,sizeof(sockaddr_in));</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD d =1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ioctlsocket(s,SIO_RCVALL,&amp;d);</div><div class="code_line">&nbsp;&nbsp; &nbsp;char buff[2000]={0};</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (recv(s,buff,2000,0)!=SOCKET_ERROR){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;in_addr ip1 , ip2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ip1.S_un.S_addr = *((int*)(buff+12));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ip2.S_un.S_addr = *((int*)(buff+16));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;user &quot; &#60;&#60; inet_ntoa(ip1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60;&quot; shlot chtoto user-u &quot; &#60;&#60;inet_ntoa(ip2) &#60;&#60;&quot;\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60;&quot;Error N:&quot; &#60;&#60; WSAGetLastError();</div><div class="code_line">_getch();</div><div class="code_line">}</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2005-10-18T20:34:54+00:00">18.10.05, 20:34</time></span></span><br>
во ,  убрал еще 1 строчку)))<br>
ну что , кто короче??  :lol:]]></description>
        <author>LuckLess</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889674</guid>
        <pubDate>Tue, 18 Oct 2005 20:24:32 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889674</link>
        <description><![CDATA[cozy: Посмотри это<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Ниже приведён полный код программы. Данный код не претендует на звание крутого снифера, однако при желании его можно доработать, чтобы можно было просматривать содержимое пакетов. Так же на его основе можно легко сделать простой анализатор трафика. А главное - не надо делать всяких драйверов; всё просто и понятно.<br>
<br>
Суть этого сниффера заключается в том, что используются соке<br>
<br>
Сокеты второй версии и созданный сокет переводится в режим promiscuous (прослушивания).<br>
</div></div><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;conio.h&#62;</div><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &#60;winsock2.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">#define MAX_PACKET_SIZE &nbsp; &nbsp;0x10000</div><div class="code_line">#define SIO_RCVALL &nbsp; &nbsp; &nbsp; &nbsp; 0x98000001</div><div class="code_line">// Буфер для приёма данных</div><div class="code_line">char Buffer[MAX_PACKET_SIZE]; // 64 Kb</div><div class="code_line">&nbsp;</div><div class="code_line">//Структура заголовка IP-пакета</div><div class="code_line">&nbsp;</div><div class="code_line">typedef struct IPHeader {</div><div class="code_line">&nbsp;&nbsp;UCHAR &nbsp; iph_verlen; &nbsp; // версия и длина заголовка</div><div class="code_line">&nbsp;&nbsp;UCHAR &nbsp; iph_tos; &nbsp; &nbsp; &nbsp;// тип сервиса</div><div class="code_line">&nbsp;&nbsp;USHORT &nbsp;iph_length; &nbsp; // длина всего пакета</div><div class="code_line">&nbsp;&nbsp;USHORT &nbsp;iph_id; &nbsp; &nbsp; &nbsp; // Идентификация</div><div class="code_line">&nbsp;&nbsp;USHORT &nbsp;iph_offset; &nbsp; // флаги и смещения</div><div class="code_line">&nbsp;&nbsp;UCHAR &nbsp; iph_ttl; &nbsp; &nbsp; &nbsp;// время жизни пакета</div><div class="code_line">&nbsp;&nbsp;UCHAR &nbsp; iph_protocol; // протокол</div><div class="code_line">&nbsp;&nbsp;USHORT &nbsp;iph_xsum; &nbsp; &nbsp; // контрольная сумма</div><div class="code_line">&nbsp;&nbsp;ULONG &nbsp; iph_src; &nbsp; &nbsp; &nbsp;// IP-адрес отправителя</div><div class="code_line">&nbsp;&nbsp;ULONG &nbsp; iph_dest; &nbsp; &nbsp; // IP-адрес назначения</div><div class="code_line">} IPHeader;</div><div class="code_line">&nbsp;</div><div class="code_line">char src[10];</div><div class="code_line">char dest[10];</div><div class="code_line">char ds[15];</div><div class="code_line">unsigned short lowbyte;</div><div class="code_line">unsigned short hibyte;</div><div class="code_line">&nbsp;</div><div class="code_line">void main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;WSADATA &nbsp; &nbsp; wsadata; &nbsp; // Инициализация WinSock.</div><div class="code_line">&nbsp;&nbsp;SOCKET &nbsp; &nbsp; &nbsp;s; &nbsp; &nbsp; &nbsp; &nbsp; // Cлущающий сокет.</div><div class="code_line">&nbsp;&nbsp;char &nbsp; &nbsp; &nbsp; &nbsp;name[128]; // Имя хоста (компьютера).</div><div class="code_line">&nbsp;&nbsp;HOSTENT* &nbsp; &nbsp;phe; &nbsp; &nbsp; &nbsp; // Информация о хосте.</div><div class="code_line">&nbsp;&nbsp;SOCKADDR_IN sa; &nbsp; &nbsp; &nbsp; &nbsp;// Адрес хоста</div><div class="code_line">&nbsp;&nbsp;IN_ADDR sa1; &nbsp; &nbsp; &nbsp; &nbsp;//</div><div class="code_line">&nbsp;&nbsp;unsigned long &nbsp; &nbsp; &nbsp; &nbsp;flag = 1; &nbsp;// Флаг PROMISC Вкл/выкл.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// инициализация</div><div class="code_line">&nbsp;&nbsp;WSAStartup(MAKEWORD(2,2), &amp;wsadata);</div><div class="code_line">&nbsp;&nbsp;s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );</div><div class="code_line">&nbsp;&nbsp;gethostname(name, sizeof(name));</div><div class="code_line">&nbsp;&nbsp;phe = gethostbyname( name );</div><div class="code_line">&nbsp;&nbsp;ZeroMemory( &amp;sa, sizeof(sa) );</div><div class="code_line">&nbsp;&nbsp;sa.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp;sa.sin_addr.s_addr = ((struct in_addr *)phe-&#62;h_addr_list[0])-&#62;s_addr;</div><div class="code_line">&nbsp;&nbsp;bind(s, (SOCKADDR *)&amp;sa, sizeof(SOCKADDR));</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Включение promiscuous mode.</div><div class="code_line">&nbsp;&nbsp;ioctlsocket(s, SIO_RCVALL, &amp;flag);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Бесконечный цикл приёма IP-пакетов.</div><div class="code_line">&nbsp;&nbsp;while( !_kbhit() )</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int count;</div><div class="code_line">&nbsp;&nbsp; &nbsp;count = recv( s, Buffer, sizeof(Buffer), 0 );</div><div class="code_line">&nbsp;&nbsp; &nbsp;// обработка IP-пакета</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( count &#62;= sizeof(IPHeader) )</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;IPHeader* hdr = (IPHeader *)Buffer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//Начинаем разбор пакета...</div><div class="code_line">&nbsp;</div><div class="code_line">strcpy(src,&quot;Пакет: &quot;);</div><div class="code_line">CharToOem(src,dest);</div><div class="code_line">printf(dest);</div><div class="code_line">// Преобразуем в понятный вид адрес отправителя.</div><div class="code_line">printf(&quot;From &quot;);</div><div class="code_line">sa1.s_addr = hdr-&#62;iph_src;</div><div class="code_line">printf(inet_ntoa(sa1));</div><div class="code_line">&nbsp;</div><div class="code_line">// Преобразуем в понятный вид адрес получателя.</div><div class="code_line">printf(&quot; To &quot;);</div><div class="code_line">sa1.s_addr = hdr-&#62;iph_dest;</div><div class="code_line">printf(inet_ntoa(sa1));</div><div class="code_line">&nbsp;</div><div class="code_line">// Вычисляем протокол. Полный список этих констант</div><div class="code_line">// содержится в файле winsock2.h</div><div class="code_line">printf(&quot; Prot: &quot;);</div><div class="code_line">if(hdr-&#62;iph_protocol == IPPROTO_TCP) printf(&quot;TCP &quot;);</div><div class="code_line">if(hdr-&#62;iph_protocol == IPPROTO_UDP) printf(&quot;UDP &quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">// Вычисляем размер. Так как в сети принят прямой порядок</div><div class="code_line">// байтов, а не обратный, то прийдётся поменять байты местами.</div><div class="code_line">printf(&quot;Size: &quot;);</div><div class="code_line">lowbyte = hdr-&#62;iph_length&#62;&#62;8;</div><div class="code_line">hibyte = hdr-&#62;iph_length&#60;&#60;8;</div><div class="code_line">hibyte = hibyte + lowbyte;</div><div class="code_line">printf(&quot;%s&quot;,itoa(hibyte,&quot;&quot;,10));</div><div class="code_line">&nbsp;</div><div class="code_line">// Вычисляем время жизни пакета.</div><div class="code_line">printf(&quot; TTL:%s&quot;,itoa(hdr-&#62;iph_ttl,&quot;&quot;,10));</div><div class="code_line">printf(&quot;\n&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;closesocket( s );</div><div class="code_line">&nbsp;&nbsp;WSACleanup();</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>cozy</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889668</guid>
        <pubDate>Tue, 18 Oct 2005 20:19:20 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889668</link>
        <description><![CDATA[Oleg2004: <strong class='tag-b'>MinLexx</strong><br>
SIO_RCVALL<br>
Cмотрите <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=92822&hl=rcvall' target='_blank'>это</a><br>
и вот <a class='tag-url' href='http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=9626' target='_blank'>это</a>]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889658</guid>
        <pubDate>Tue, 18 Oct 2005 20:05:52 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889658</link>
        <description><![CDATA[MinLexx: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=118655&view=findpost&p=889645'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2005-10-18T19:40:28+00:00">18.10.05, 19:40</time></span><div class='quote '>Поиск по форуму дает это</div></div><br>
Там всё на тему &quot;как отправить&quot;, &quot;как послать&quot; итп... ПОиск я уже смотрел... не особо мне он помог....<br>
Мне бы как ПОЛУЧИТЬ пакет... причём не UDP, как в той ссылке, а любой IP-пакет....]]></description>
        <author>MinLexx</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889645</guid>
        <pubDate>Tue, 18 Oct 2005 19:40:28 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889645</link>
        <description><![CDATA[Oleg2004: <strong class='tag-b'>MinLexx</strong><br>
Поиск по форуму дает <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=84663&hl=raw+%F1%EE%EA%E5%F2' target='_blank'>это</a>]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889642</guid>
        <pubDate>Tue, 18 Oct 2005 19:31:55 +0000</pubDate>
        <title>RAW sockets</title>
        <link>https://forum.sources.ru/index.php?showtopic=118655&amp;view=findpost&amp;p=889642</link>
        <description><![CDATA[MinLexx: Хочу научиться работать с RAW сокетами, а именно - хотелось  бы написать сниффер пакетов (ну, для начала, хотя бы примитивный)...<br>
Так вот. Задача: я хочу получать на сокет ВСЕ IP пакеты. Как мне для этого создавать сокет? Как делать bind()?<br>
Получать UDP пакеты с порта 27015 я научился...<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">//create socket</div><div class="code_line">SOCKET s = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);</div><div class="code_line">if(s==INVALID_SOCKET) return -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">//bind</div><div class="code_line">sockaddr_in local_addr;</div><div class="code_line">local_addr.sin_family = AF_INET;</div><div class="code_line">local_addr.sin_port = htons(27015);</div><div class="code_line">local_addr.sin_addr.S_un.S_addr = INADDR_ANY;</div><div class="code_line">if(bind(s, (const struct sockaddr *)&amp;local_addr, sizeof(local_addr)) == SOCKET_ERROR) return -2;</div><div class="code_line">&nbsp;</div><div class="code_line">//recv</div><div class="code_line">sockaddr addr_from;</div><div class="code_line">int from_len = sizeof(addr_from);</div><div class="code_line">res = recvfrom(s, buf, buf_size-1, 0, &amp;addr_from, &amp;from_len); //buf - буфер, buf_size - &nbsp;его длина</div><div class="code_line">if(res&#62;0)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Log(&quot;NT: INFO: recvfrom() success&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;buf[res] = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Log(buf); // в общем - вывод на экран</div><div class="code_line">}</div><div class="code_line">else</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;//ошибка....</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">SOCKET s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);</div></ol></div></div></div></div><br>
Сокет создаётся. Без <strong class='tag-b'>bind() recvfrom()</strong> вылетает с ошибкой <strong class='tag-b'>WSAEINVAL</strong>, что говорит о том, что <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>MSDN</span><div class='quote '>The socket has not been bound with bind...</div></div><br>
А к какому адресу биндиться-то RAW-сокету с <strong class='tag-b'>IPPROTO_IP</strong>? Использовать ли <strong class='tag-b'>sockaddr_in</strong> или просто <strong class='tag-b'>sockaddr</strong>?..<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">//bind</div><div class="code_line">sockaddr local_addr;</div><div class="code_line">local_addr.sa_family = AF_INET;</div><div class="code_line">memset(local_addr.sa_data, 0, 14);</div></ol></div></div></div></div> - после такого <strong class='tag-b'>bind()</strong> завершается упешно, но <strong class='tag-b'>recvfrom()</strong> зависает на очень длительное время, будто IP пакеты на комп вообще не приходят (а такое у меня невозможно ;) )...<br>
<br>
Как быть? как &quot;схватить&quot; все IP пакеты, которые машина получает?]]></description>
        <author>MinLexx</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	