<?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=39884&amp;view=findpost&amp;p=512744</guid>
        <pubDate>Tue, 16 Nov 2004 01:26:19 +0000</pubDate>
        <title>Реализация PING&amp;#39;а</title>
        <link>https://forum.sources.ru/index.php?showtopic=39884&amp;view=findpost&amp;p=512744</link>
        <description><![CDATA[.failer: еще одна реализация ping (запрос - ожидание ответа)<br>
На форме использовал одно Memo, для конторля.<br>
Для запуска программы на системе NT необходимы права администратора.<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">&nbsp;&nbsp;icmphead = record</div><div class="code_line">&nbsp;&nbsp; &nbsp;icmp_type: byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp;icmp_code: byte ;</div><div class="code_line">&nbsp;&nbsp; &nbsp;icmp_chksum: word;</div><div class="code_line">&nbsp;&nbsp; &nbsp;icmp_id: word;</div><div class="code_line">&nbsp;&nbsp; &nbsp;icmp_seq: word;</div><div class="code_line">&nbsp;&nbsp; &nbsp;icmp_data: array [0..55] of byte; // можно больше а можно и меньше</div><div class="code_line">&nbsp;&nbsp;end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
сама функция пинга (параметр - ip который надо пингануть).<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">function ping(ip: DWORD): bool;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; s: integer;</div><div class="code_line">&nbsp;&nbsp; pid: WORD;</div><div class="code_line">&nbsp;&nbsp; sai: tsockaddrin;</div><div class="code_line">&nbsp;&nbsp; size: integer;</div><div class="code_line">&nbsp;&nbsp; icmp: icmphead;</div><div class="code_line">&nbsp;&nbsp; len: integer;</div><div class="code_line">&nbsp;&nbsp; flag: bool;</div><div class="code_line">&nbsp;&nbsp; buf: array [0..255] of byte;</div><div class="code_line">&nbsp;&nbsp; picmp: ^icmphead;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; flag:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; pid:=word(GetCurrentProcessId);</div><div class="code_line">&nbsp;&nbsp; &nbsp; s:=socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if(s&#60;0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; form1.Memo1.Lines.Add(&#39;socket error&#39;); // это так для теста, если вдруг сокет не создан</div><div class="code_line">&nbsp;&nbsp; &nbsp; FillChar(sai, sizeof(sai), 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; sai.sin_family:=AF_INET;</div><div class="code_line">&nbsp;&nbsp; &nbsp; sai.sin_addr.S_addr:=inet_addr(ip);</div><div class="code_line">&nbsp;&nbsp; &nbsp; connect(s, sai, sizeof(sai));</div><div class="code_line">&nbsp;&nbsp; &nbsp; icmp.icmp_type := 8;</div><div class="code_line">&nbsp;&nbsp; &nbsp; icmp.icmp_code := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; icmp.icmp_id := pid;</div><div class="code_line">&nbsp;&nbsp; &nbsp; icmp.icmp_seq := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; len := sizeof(icmp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; icmp.icmp_chksum := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; icmp.icmp_chksum := in_cksum(icmp, len);</div><div class="code_line">&nbsp;&nbsp; &nbsp; send(s, icmp, sizeof(icmp), 0); // посылаем</div><div class="code_line">&nbsp;&nbsp; &nbsp; while not flag do</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;recv(s, buf, 256, 0); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// AHTUNG!!! вот тут тайм аут нужен.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Можно SO_RCVTIMEO сокету поставить. иначе прога застынет </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &quot;навсегда&quot; в случае не ответа</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;picmp:=@buf[20];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;form1.memo1.Lines.Add(&#39;recv &#39;+ inttostr(picmp^.icmp_id)+&#39; &#39;+ inttostr(pid)); // это для контроля</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;flag:=(picmp^.icmp_id=pid); // это наш ответ?</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; result:=picmp^.icmp_type; // возвращаем тип ICMP, если он 0 то это ответ.</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
<br>
рассчет контроьной суммы (взято из Linux и переведено на делфи)<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">function in_cksum(var buf; len:integer):word;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;p: pointer;</div><div class="code_line">&nbsp;&nbsp;sum: longint;</div><div class="code_line">&nbsp;&nbsp;i: integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;p:=@buf;</div><div class="code_line">&nbsp;&nbsp;sum:=0;</div><div class="code_line">&nbsp;&nbsp;for i:=1 to len div 2 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;sum:=sum+word(p^);</div><div class="code_line">&nbsp;&nbsp; &nbsp;p:=pointer(longint(p)+2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if len mod 1&#60;&#62;0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;sum:=sum+byte(p^);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;sum:=(sum shr 16) + (sum and $ffff);</div><div class="code_line">&nbsp;&nbsp;sum:=sum+(sum shr 16);</div><div class="code_line">&nbsp;&nbsp;result:=word(NOT sum);</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
все - проверено, работает.]]></description>
        <author>.failer</author>
        <category>Интернет, сети, протоколы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=39884&amp;view=findpost&amp;p=258542</guid>
        <pubDate>Sat, 06 Dec 2003 06:17:03 +0000</pubDate>
        <title>Реализация PING&amp;#39;а</title>
        <link>https://forum.sources.ru/index.php?showtopic=39884&amp;view=findpost&amp;p=258542</link>
        <description><![CDATA[Song: Протокол Ping предназначен для тестирования компьютерных соединений в Интернете путём посылки через протокол Internet Protocol (IP) по обределённому адресу сообщения и ожидания от него ответа. <br><br>ICMP - Internet Control Message Protocol. ICMP служит для передачи сообщений об ошибках а так же управляющих сообщений .   ICMP-тест может показать насколько быстро проходит информация между двумя узлами в Интернете. <br><br>1. Запускаем Delphi; <br>2. В Новом проекте добавляем в форму Tbutton, Tedit и Tmemo; <br>3. Вставляем “winsock”; <br>4. объявляем структурку для IP-заголовка: <br><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1-->type <br> &nbsp;IPINFO = record <br> &nbsp;Ttl &nbsp; &nbsp; &#58;char; <br> &nbsp;Tos &nbsp; &nbsp; &#58;char; <br> &nbsp;IPFlags &#58;char; <br> &nbsp;OptSize &#58;char; <br> &nbsp;Options &#58;^char; <br>end; <!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br>5. объявляем структурку для хранения ICMP пакета: <br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1-->type <br> &nbsp;ICMPECHO = record <br> &nbsp;Source &nbsp;&#58;longint; <br> &nbsp;Status &nbsp;&#58;longint; <br> &nbsp;RTTime &nbsp;&#58;longint; <br> &nbsp;DataSize&#58;Shortint; <br> &nbsp;Reserved&#58;Shortint; <br> &nbsp;pData &nbsp; &#58;^variant; <br> &nbsp;i_ipinfo&#58;IPINFO; <br>end; <!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br>6. Объявляем функции и процедуры, которые мы будем вызывать из ICMP.DLL <br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1-->TIcmpCreateFile = function&#40;&#41;&#58;integer; {&#036;IFDEF WIN32} stdcall; {&#036;ENDIF} <br>TIcmpCloseHandle = procedure&#40;var handle&#58;integer&#41;;{&#036;IFDEF WIN32} stdcall; {&#036;ENDIF} <br>TIcmpSendEcho = function&#40;var handle&#58;integer; endereco&#58;DWORD; buffer&#58;variant; tam&#58;WORD; IP&#58;IPINFO; ICMP&#58;ICMPECHO; tamicmp&#58;DWORD; tempo&#58;DWORD&#41;&#58;DWORD;{&#036;IFDEF WIN32} stdcall; {&#036;ENDIF} <!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br>7. В Tbutton в событие Onclick вставляем следующий код: <br><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1-->procedure TForm1.Button1Click&#40;Sender&#58; TObject&#41;; <br>var <br>wsadt &#58; wsadata; <br>icmp &nbsp;&#58;icmpecho; <br>HNDicmp &#58; integer; <br>hndFile &#58;integer; <br>Host &#58;PHostEnt; <br>Destino &#58;in_addr; <br>Endereco &#58;^DWORD; <br>IP &#58; ipinfo; <br>Retorno &#58;integer; <br>dwRetorno &#58;DWORD; <br>x &#58;integer; <br><br>IcmpCreateFile &#58; TIcmpCreateFile; <br>IcmpCloseHandle &#58; TIcmpCloseHandle; <br>IcmpSendEcho &#58; TIcmpSendEcho; <br><br>begin <br> &nbsp; &nbsp;if &#40;edit1.Text = &#39;&#39;&#41; then begin <br> &nbsp; &nbsp; Application.MessageBox&#40;&#39;Enter a HostName ro a IP Adress&#39;, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;Error&#39;, MB_OK&#41;; <br> &nbsp; &nbsp; exit; <br> &nbsp; &nbsp;end; <br> &nbsp; &nbsp;HNDicmp &#58;= LoadLibrary&#40;&#39;ICMP.DLL&#39;&#41;; <br> &nbsp; &nbsp;if &#40;HNDicmp &#60;&#62; 0&#41; then begin <br> &nbsp; &nbsp; &nbsp; @IcmpCreateFile &#58;= GetProcAddress&#40;HNDicmp,&#39;IcmpCreateFile&#39;&#41;; <br> &nbsp; &nbsp; &nbsp; @IcmpCloseHandle &#58;= GetProcAddress&#40;HNDicmp,&#39;IcmpCloseHandle&#39;&#41;; <br> &nbsp; &nbsp; &nbsp; @IcmpSendEcho &#58;= GetProcAddress&#40;HNDicmp,&#39;IcmpSendEcho&#39;&#41;; <br> &nbsp; &nbsp; &nbsp; if &#40;@IcmpCreateFile=nil&#41; or &#40;@IcmpCloseHandle=nil&#41; or &#40;@IcmpSendEcho=nil&#41; then &nbsp;begin <br> &nbsp; &nbsp; &nbsp; &nbsp; Application.MessageBox&#40;&#39;Error getting ICMP Adress’,&#39;Error&#39;, MB_OK&#41;; <br> &nbsp; &nbsp; &nbsp; &nbsp; FreeLibrary&#40;HNDicmp&#41;; <br> &nbsp; &nbsp; &nbsp; end; <br> &nbsp; &nbsp;end; <br> &nbsp; &nbsp;Retorno &#58;= WSAStartup&#40;&#036;0101,wsadt&#41;; <br><br> &nbsp; &nbsp;if &#40;Retorno &#60;&#62; 0&#41; then begin <br> &nbsp; &nbsp; &nbsp;Application.MessageBox&#40;&#39;Canґt Load WinSockets&#39;,&#39;WSAStartup&#39;, MB_OK&#41;; <br> &nbsp; &nbsp; &nbsp;WSACleanup&#40;&#41;; <br> &nbsp; &nbsp; &nbsp;FreeLibrary&#40;HNDicmp&#41;; <br> &nbsp; &nbsp;end; <br><br> &nbsp; &nbsp;Destino.S_addr &#58;= inet_addr&#40;Pchar&#40;Edit1.text&#41;&#41;; <br> &nbsp; &nbsp;if &#40;Destino.S_addr = 0&#41; then begin <br> &nbsp; &nbsp; &nbsp; Host &#58;= GetHostbyName&#40;PChar&#40;Edit1.text&#41;&#41;; <br> &nbsp; &nbsp; &nbsp; end <br> &nbsp; &nbsp;else begin <br> &nbsp; &nbsp; &nbsp; Host &#58;= GetHostbyAddr&#40;@Destino,sizeof&#40;in_addr&#41;, AF_INET&#41;; <br> &nbsp; &nbsp;end; <br><br> &nbsp; &nbsp;if &#40;host = nil&#41; then begin <br> &nbsp; &nbsp; &nbsp; &nbsp; Application.MessageBox&#40;&#39;Host not found&#39;,&#39;Error&#39;, MB_OK&#41;; <br> &nbsp; &nbsp; &nbsp; &nbsp; WSACleanup&#40;&#41;; <br> &nbsp; &nbsp; &nbsp; &nbsp; FreeLibrary&#40;HNDicmp&#41;; <br> &nbsp; &nbsp; &nbsp; &nbsp; exit; <br> &nbsp; &nbsp;end; <br> &nbsp; &nbsp;memo1.Lines.Add&#40;&#39;Pinging &#39; + Edit1.text&#41;; <br><br> &nbsp; &nbsp;Endereco &#58;= @Host.h_addr_list; <br><br> &nbsp; &nbsp;HNDFile &#58;= IcmpCreateFile&#40;&#41;; <br> &nbsp; &nbsp;for x&#58;= 0 to 4 do begin <br> &nbsp; &nbsp; &nbsp;Ip.Ttl &#58;= char&#40;255&#41;; <br> &nbsp; &nbsp; &nbsp;Ip.Tos &#58;= char&#40;0&#41;; <br> &nbsp; &nbsp; &nbsp;Ip.IPFlags &#58;= char&#40;0&#41;; <br> &nbsp; &nbsp; &nbsp;Ip.OptSize &#58;= char&#40;0&#41;; <br> &nbsp; &nbsp; &nbsp;Ip.Options &#58;= nil; <br><br> &nbsp; &nbsp; &nbsp;dwRetorno &#58;= IcmpSendEcho&#40; <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HNDFile, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Endereco^, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; null, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ip, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Icmp, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeof&#40;Icmp&#41;, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DWORD&#40;5000&#41;&#41;; <br> &nbsp; &nbsp; &nbsp;Destino.S_addr &#58;= icmp.source; <br> &nbsp; &nbsp; &nbsp;Memo1.Lines.Add&#40;&#39;Ping &#39; + Edit1.text&#41;; <br> &nbsp; &nbsp; end; <br><br><br> &nbsp; IcmpCLoseHandle&#40;HNDFile&#41;; <br> &nbsp; FreeLibrary&#40;HNDicmp&#41;; <br> &nbsp; WSACleanup&#40;&#41;; <br>end; <!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br>У данного примера есть один недостаток - программа не воспримет доменное имя, только IP-адресс. Для пользователей NT не используйте функцию IcmpCloseHandle.<br><br>Это всё….. <br><br>Ну и в конце полный исходный код примера: <br><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1-->unit Unit1; <br><br>interface <br><br>uses <br> &nbsp;Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, <br> &nbsp;winsock, StdCtrls; <br><br>type <br> &nbsp;IPINFO = record <br> &nbsp;Ttl &nbsp; &nbsp; &#58;char; <br> &nbsp;Tos &nbsp; &nbsp; &#58;char; <br> &nbsp;IPFlags &#58;char; <br> &nbsp;OptSize &#58;char; <br> &nbsp;Options &#58;^char; <br>end; <br><br>type <br>ICMPECHO = record <br>Source &nbsp;&#58;longint; <br>Status &nbsp;&#58;longint; <br>RTTime &nbsp;&#58;longint; <br>DataSize&#58;Shortint; <br>Reserved&#58;Shortint; <br>pData &nbsp; &#58;^variant; <br>i_ipinfo&#58;IPINFO; <br>end; <br><br>TIcmpCreateFile = function&#40;&#41;&#58;integer; {&#036;IFDEF WIN32} stdcall; {&#036;ENDIF} <br>TIcmpCloseHandle = procedure&#40;var handle&#58;integer&#41;;{&#036;IFDEF WIN32} stdcall; {&#036;ENDIF} <br>TIcmpSendEcho = function&#40;var handle&#58;integer; endereco&#58;DWORD; buffer&#58;variant; tam&#58;WORD; IP&#58;IPINFO; ICMP&#58;ICMPECHO; tamicmp&#58;DWORD; tempo&#58;DWORD&#41;&#58;DWORD;{&#036;IFDEF WIN32} stdcall; {&#036;ENDIF} <br><br><br>type <br> &nbsp;TForm1 = class&#40;TForm&#41; <br> &nbsp; &nbsp;Button1&#58; TButton; <br> &nbsp; &nbsp;Button2&#58; TButton; <br> &nbsp; &nbsp;Edit1&#58; TEdit; <br> &nbsp; &nbsp;Memo1&#58; TMemo; <br> &nbsp; &nbsp;procedure Button1Click&#40;Sender&#58; TObject&#41;; <br> &nbsp; &nbsp;procedure Button2Click&#40;Sender&#58; TObject&#41;; <br> &nbsp;private <br> &nbsp; &nbsp;{ Private declarations } <br> &nbsp;public <br><br> &nbsp;end; <br><br>var <br> &nbsp;Form1&#58; TForm1; <br><br>implementation <br><br>{&#036;R *.DFM} <br><br>procedure TForm1.Button1Click&#40;Sender&#58; TObject&#41;; <br>var <br>wsadt &#58; wsadata; <br>icmp &nbsp;&#58;icmpecho; <br>HNDicmp &#58; integer; <br>hndFile &#58;integer; <br>Host &#58;PHostEnt; <br>Destino &#58;in_addr; <br>Endereco &#58;^DWORD; <br>IP &#58; ipinfo; <br>Retorno &#58;integer; <br>dwRetorno &#58;DWORD; <br>x &#58;integer; <br><br>IcmpCreateFile &#58; TIcmpCreateFile; <br>IcmpCloseHandle &#58; TIcmpCloseHandle; <br>IcmpSendEcho &#58; TIcmpSendEcho; <br><br>begin <br> &nbsp; &nbsp;if &#40;edit1.Text = &#39;&#39;&#41; then begin <br> &nbsp; &nbsp; Application.MessageBox&#40;&#39;Digite um HostName ou um End. IP&#39;, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;Error&#39;, MB_OK&#41;; <br> &nbsp; &nbsp; exit; <br> &nbsp; &nbsp;end; <br> &nbsp; &nbsp;HNDicmp &#58;= LoadLibrary&#40;&#39;ICMP.DLL&#39;&#41;; <br> &nbsp; &nbsp;if &#40;HNDicmp &#60;&#62; 0&#41; then begin <br> &nbsp; &nbsp; &nbsp; @IcmpCreateFile &#58;= GetProcAddress&#40;HNDicmp,&#39;IcmpCreateFile&#39;&#41;; <br> &nbsp; &nbsp; &nbsp; @IcmpCloseHandle &#58;= GetProcAddress&#40;HNDicmp,&#39;IcmpCloseHandle&#39;&#41;; <br> &nbsp; &nbsp; &nbsp; @IcmpSendEcho &#58;= GetProcAddress&#40;HNDicmp,&#39;IcmpSendEcho&#39;&#41;; <br> &nbsp; &nbsp; &nbsp; if &#40;@IcmpCreateFile=nil&#41; or &#40;@IcmpCloseHandle=nil&#41; or &#40;@IcmpSendEcho=nil&#41; then &nbsp;begin <br> &nbsp; &nbsp; &nbsp; &nbsp; Application.MessageBox&#40;&#39;Erro pegando endereзos ICMP&#39;,&#39;Error&#39;, MB_OK&#41;; <br> &nbsp; &nbsp; &nbsp; &nbsp; FreeLibrary&#40;HNDicmp&#41;; <br> &nbsp; &nbsp; &nbsp; end; <br> &nbsp; &nbsp;end; <br> &nbsp; &nbsp;Retorno &#58;= WSAStartup&#40;&#036;0101,wsadt&#41;; <br><br> &nbsp; &nbsp;if &#40;Retorno &#60;&#62; 0&#41; then begin <br> &nbsp; &nbsp; &nbsp;Application.MessageBox&#40;&#39;Nгo foi possнvel carregar WinSockets&#39;,&#39;WSAStartup&#39;, MB_OK&#41;; <br> &nbsp; &nbsp; &nbsp;WSACleanup&#40;&#41;; <br> &nbsp; &nbsp; &nbsp;FreeLibrary&#40;HNDicmp&#41;; <br> &nbsp; &nbsp;end; <br><br> &nbsp; &nbsp;Destino.S_addr &#58;= inet_addr&#40;Pchar&#40;Edit1.text&#41;&#41;; <br> &nbsp; &nbsp;if &#40;Destino.S_addr = 0&#41; then begin <br> &nbsp; &nbsp; &nbsp; Host &#58;= GetHostbyName&#40;PChar&#40;Edit1.text&#41;&#41;; <br> &nbsp; &nbsp; &nbsp; end <br> &nbsp; &nbsp;else begin <br> &nbsp; &nbsp; &nbsp; Host &#58;= GetHostbyAddr&#40;@Destino,sizeof&#40;in_addr&#41;, AF_INET&#41;; <br> &nbsp; &nbsp;end; <br><br> &nbsp; &nbsp;if &#40;host = nil&#41; then begin <br> &nbsp; &nbsp; &nbsp; &nbsp; Application.MessageBox&#40;&#39;Host nгo encontrado&#39;,&#39;Error&#39;, MB_OK&#41;; <br> &nbsp; &nbsp; &nbsp; &nbsp; WSACleanup&#40;&#41;; <br> &nbsp; &nbsp; &nbsp; &nbsp; FreeLibrary&#40;HNDicmp&#41;; <br> &nbsp; &nbsp; &nbsp; &nbsp; exit; <br> &nbsp; &nbsp;end; <br> &nbsp; &nbsp;memo1.Lines.Add&#40;&#39;Pinging &#39; + Edit1.text&#41;; <br><br> &nbsp; &nbsp;Endereco &#58;= @Host.h_addr_list; <br><br> &nbsp; &nbsp;HNDFile &#58;= IcmpCreateFile&#40;&#41;; <br> &nbsp; &nbsp;for x&#58;= 0 to 4 do begin <br> &nbsp; &nbsp; &nbsp;Ip.Ttl &#58;= char&#40;255&#41;; <br> &nbsp; &nbsp; &nbsp;Ip.Tos &#58;= char&#40;0&#41;; <br> &nbsp; &nbsp; &nbsp;Ip.IPFlags &#58;= char&#40;0&#41;; <br> &nbsp; &nbsp; &nbsp;Ip.OptSize &#58;= char&#40;0&#41;; <br> &nbsp; &nbsp; &nbsp;Ip.Options &#58;= nil; <br><br> &nbsp; &nbsp; &nbsp;dwRetorno &#58;= IcmpSendEcho&#40; <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HNDFile, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Endereco^, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; null, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ip, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Icmp, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeof&#40;Icmp&#41;, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DWORD&#40;5000&#41;&#41;; <br> &nbsp; &nbsp; &nbsp;Destino.S_addr &#58;= icmp.source; <br> &nbsp; &nbsp; &nbsp;Memo1.Lines.Add&#40;&#39;Pingou &#39; + Edit1.text&#41;; <br> &nbsp; &nbsp; end; <br><br><br> &nbsp; IcmpCLoseHandle&#40;HNDFile&#41;; <br> &nbsp; FreeLibrary&#40;HNDicmp&#41;; <br> &nbsp; WSACleanup&#40;&#41;; <br>end; <br><br>end. <!--c2--></td></tr></table><div class='postcolor'><!--ec2-->]]></description>
        <author>Song</author>
        <category>Интернет, сети, протоколы</category>
      </item>
	
      </channel>
      </rss>
	