<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ping-Programm für Windows]]></title><description><![CDATA[<p>Moin,<br />
Wir müssen für ein Projekt ein <strong>kleines</strong> Ping-Programm in C schreiben. Leider habe ich bisher im Netz nur relativ komplizierte/grosse Programmbesipiele gefunden die meistens nicht ausreichend kommentiert sind (--&gt; ich versteh sie nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ).<br />
Hat jemand von euch eventuell ein einfaches (jaja ich weiss, ganz einfach sind pings nicht) Beispiel?</p>
<p>p.s. Es muss für Windows sein, da eine andere Gruppe mit Linux arbeitet (für Linux finde ich genug Beispiele im Netz...)</p>
<p>mfg<br />
piepre</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/74711/ping-programm-für-windows</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 23:38:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/74711.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 May 2004 07:10:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ping-Programm für Windows on Mon, 24 May 2004 07:10:29 GMT]]></title><description><![CDATA[<p>Moin,<br />
Wir müssen für ein Projekt ein <strong>kleines</strong> Ping-Programm in C schreiben. Leider habe ich bisher im Netz nur relativ komplizierte/grosse Programmbesipiele gefunden die meistens nicht ausreichend kommentiert sind (--&gt; ich versteh sie nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ).<br />
Hat jemand von euch eventuell ein einfaches (jaja ich weiss, ganz einfach sind pings nicht) Beispiel?</p>
<p>p.s. Es muss für Windows sein, da eine andere Gruppe mit Linux arbeitet (für Linux finde ich genug Beispiele im Netz...)</p>
<p>mfg<br />
piepre</p>
]]></description><link>https://www.c-plusplus.net/forum/post/526061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/526061</guid><dc:creator><![CDATA[piepre]]></dc:creator><pubDate>Mon, 24 May 2004 07:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Ping-Programm für Windows on Mon, 24 May 2004 07:41:53 GMT]]></title><description><![CDATA[<p>1. Weißt du was sockets sind?<br />
2. Hast du schon mal nach dem ping-Protokoll gesucht?<br />
3. Was hast du schon gefunden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/526073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/526073</guid><dc:creator><![CDATA[AJ]]></dc:creator><pubDate>Mon, 24 May 2004 07:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to Ping-Programm für Windows on Mon, 24 May 2004 08:12:33 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=547" rel="nofollow">Shade Of Mine</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=10" rel="nofollow">ANSI C</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=4" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/526093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/526093</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Mon, 24 May 2004 08:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to Ping-Programm für Windows on Mon, 24 May 2004 08:15:22 GMT]]></title><description><![CDATA[<p>jo.<br />
ich weiss dass man erst Sockets anfordern muss, ICMP-Packet zusammenbauen und dann senden. Diese Beschreibung in viel ausführlicheren Formen habe ich des öfteren im Netz gefunden. Leider waren die Quellcodebeispiele dafür meistens nicht so toll (wir konnten keins ohne Probleme kompilieren, was aber wohl auch an MS Visual Studio .Net 2003 liegt). Das anfordern des Sockets funtioniert auch schon, ein paar andere Sachen auch, was ich Suche ist einfach mal eine genaue Beschreibung des Quellcodes (da ja auch noch Sachen wie checksum, etc dazukommen), möglichst auf Deutsch :).</p>
<p>mfg<br />
piepre</p>
]]></description><link>https://www.c-plusplus.net/forum/post/526098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/526098</guid><dc:creator><![CDATA[piepre]]></dc:creator><pubDate>Mon, 24 May 2004 08:15:22 GMT</pubDate></item><item><title><![CDATA[Reply to Ping-Programm für Windows on Mon, 24 May 2004 10:09:14 GMT]]></title><description><![CDATA[<p>mit dem system(&quot;&quot;); aufruf und den DOS Befehl reinkloppen. in deinem fall wäre dies</p>
<p>system(&quot;ping ... ... ... ...&quot;);</p>
<p>schon fertig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/526168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/526168</guid><dc:creator><![CDATA[Biatch]]></dc:creator><pubDate>Mon, 24 May 2004 10:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to Ping-Programm für Windows on Mon, 24 May 2004 10:50:06 GMT]]></title><description><![CDATA[<p>hi!<br />
schau mal da:</p>
<pre><code>/****************************************************************************** 

Programm: Ping 
-------------- 

Man kann einen Server anpingen und schauen ob er antwortet: 
Es werden default 4 Datenpakete gesendet an den Server, der Server antwortet 
falls er erreicht werden kann, mit 4 Datenpakete zu je 64 Bytes zurück. 

Allgemeines zu ICMP: 
-------------------- 

Echo Request, Echo Reply 
------------------------ 

Diese Meldungen dienen zur Überprüfung ob ein Ziel erreichbar und 
aktiv ist. Der Sender des Echo Request wartet auf eine Echo Reply 
Message, die er nur erhält, wenn der Zielrechner aktiv ist. Als ICMP 
Typ wurde die Nummer 8 für den Request und 0 für den Echo Reply 
definiert. Der Code ist in beiden Fällen auf 0 gesetzt. Außerdem ist ein 
ICMP Echo Identifikator definiert, welcher vom Sender des 
Datagramms erzeugt wird und zur Identifikation des Prozesses dient. 
Der Empfänger schickt den Reply an diesen Port. Eine Echo Sequenz 
Nummer wird zur fortlaufenden Numerierung des Datagramms 
genutzt. Der Empfänger nutzt die Nummer bei der Antwort und 
ermöglicht dem Sender des Echo Request die Überprüfung der 
Richtigkeit der Antwort. Die ICMP Echo Daten enthalten einen Echo 
String, der vom Empfänger an den Sender zurückgeschickt wird. 

Destination Unreachable 
----------------------- 

Diese Nachricht wird an den Sender des Datagramms geschickt, 
wenn ein Subnetzwerk oder Router den Zielrechner nicht erreichen 
kann oder das Paket nicht ausgeliefert werden kann weil das Don´t 
Fragment Bit gesetzt ist und das Paket für ein Netzwerk zu groß ist. 
Die Nachricht wird vom Router generiert sofern es sich um ein nicht 
erreichbares Netzwerk oder einen unerreichbaren Zielrechner handelt. 
Sollte es sich jedoch um einen unerreichbaren Port handeln so schickt 
diese Meldung der Zielrechner. 

ICMP Typ 

Zur Unterscheidung der einzelnen ICMP Meldungen wurden ICMP 
Nummern definiert. Die Destination Unreachable Meldung hat die 
Nummer 3. 

ICMP Code 

Der ICMP Code teilt dem Sender mit, weshalb sein Datagramm nicht 
übermittelt werden konnte. Es sind die folgenden Destination 
Unreachable Codes definiert: 

0= Netz nicht erreichbar 
1= Rechner nicht erreichbar 
2= Protokoll nicht erreichbar 
3= Port nicht erreichbar 
4= Fragmentierung notwendig, jedoch nicht möglich wegen gesetztem DF Bit 
5= Source Route nicht erreichbar 

******************************************************************************/ 

#include &lt;windows.h&gt; 
#include &lt;stdlib.h&gt; 
#include &lt;string&gt; 
#include &lt;sstream&gt; 
#include &lt;iostream&gt; 
#include &lt;stdio.h&gt; 
#include &lt;iostream.h&gt; 

using namespace std; 

#define ICMP_ECHOREPLY                 0 
#define ICMP_UNREACHABLE               3 
#define ICMP_ECHO                      8 

// 0 = Netz nicht erreichbar 
#define ICMP_CODE_NETWORK_UNREACHABLE  0 
// 1 = Rechner nicht erreichbar 
#define ICMP_CODE_HOST_UNREACHABLE     1 

// Minimalgrösse 8 Byte 
#define ICMP_MIN            8 

#define STATUS_FAILED       0xFFFF 
#define DEF_PACKET_SIZE     32 
#define MAX_PACKET          65000 

/* 
Der IP Header: 
-------------- 

|  Byte 0       |   Byte 1      |  Byte 2       |  Byte 3       | 

0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Version|  IHL  |Type of Service|          Total Length         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|         Identification        |Flags|      Fragment Offset    | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|  Time to Live |    Protocol   |         Header Checksum       | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                       Source Address                          | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Destination Address                        | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
*/ 

struct IP_HEADER 
{ 
  unsigned int   h_len:4;          // Länge des Headers 
  unsigned int   version:4;        // IP Version 
  unsigned char  tos;              // Type of service 
  unsigned short total_len;        // Gesamt länge des Pakets 
  unsigned short ident;            // unique identifier 
  unsigned short frag_and_flags;   // flags 
  unsigned char  ttl;              // TTL 
  unsigned char  proto;            // Protokoll (TCP, UDP etc) 
  unsigned short checksum;         // IP Checksumme 
  unsigned int   sourceIP;         // Source IP 
  unsigned int   destIP;           // Ziel IP 
}; 

/* 
Der ICMP Header: 
---------------- 

|  Byte 0       |   Byte 1      |  Byte 2       |  Byte 3       | 

0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Type          | Code          |     ICMP Header Prüfsumme     | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Identifikatior |Sequenz Nummer |                               | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                      Timestamp                                | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

*/ 

struct ICMP_HEADER 
{ 
  char           i_type;    // Type 
  char           i_code;    // Code 
  unsigned short i_cksum;   // Prüfsumme 
  unsigned short i_id;      // Identifikatior 
  unsigned short i_seq;     // Sequenz Nummer 
  unsigned long  timestamp; // Um die benötigte Zeit zu messen 
}; 

long WinsockStartup(); 
void FillIcmpData(char* icmp_data, int datasize); 
unsigned short checksum(unsigned short *buffer, int size); 
void DecodeResponse(char *buf, int bytes, SOCKADDR_IN *from); 

// Für Messagebox Ausgabe 
ostringstream os; 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevIsntance, LPSTR lpCmdine, int nShowCmd) 
{ 
  //WNDCLASS WndClass; 
  //HWND hWnd; 

  SOCKET sockRaw; 
  SOCKADDR_IN addrDest; 
  SOCKADDR_IN addrFrom; 
  int addrFromLen = sizeof(addrFrom); 
  HOSTENT* ptrHostent; 
  unsigned long datasize; 
  int RecvTimeout = 1000; 
  char *dest_ip; 
  char *icmp_data; 
  char *recvbuf; 
  unsigned int addr=0; 
  unsigned short seq_no = 0; 
  int BytesReceived; 
  int BytesSent; 
  long rc; 
  unsigned ping_anzahl=0; 

  // Die IP fuers anpingen: http://suse.de 
  const char* ip=&quot;195.135.220.3&quot;; 

  rc = WinsockStartup(); 
  if (rc == SOCKET_ERROR) 
  { 
   os &lt;&lt; &quot;Error: WinsockStartup failed: &quot; &lt;&lt; WSAGetLastError(); 
   MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
   os.str(&quot;&quot;); 
    return SOCKET_ERROR; 
  } 
  sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); 
  if (sockRaw == INVALID_SOCKET) 
  { 
   os &lt;&lt; &quot;Error: Cannot create Socket: &quot; &lt;&lt; WSAGetLastError(); 
   MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
   os.str(&quot;&quot;); 
    return SOCKET_ERROR; 
  } 
  rc = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&amp;RecvTimeout, sizeof(RecvTimeout)); 
  if(rc == SOCKET_ERROR) 
  { 
   os &lt;&lt; &quot;Error: Cannot set Recv Timeout: &quot; &lt;&lt; WSAGetLastError(); 
   MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
   os.str(&quot;&quot;); 
    return SOCKET_ERROR; 
  } 

  // Ip Adresse in ptrHostent geben 
  ptrHostent = gethostbyname(ip); 

  if ((!ptrHostent)  &amp;&amp; (addr == INADDR_NONE) ) 
  { 
   os &lt;&lt; &quot;Error: Cannot resolve Host: &quot; &lt;&lt; WSAGetLastError(); 
   MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
    return SOCKET_ERROR; 
  } 
  if (ptrHostent != NULL) 
  { 
    memcpy(&amp;(addrDest.sin_addr),ptrHostent-&gt;h_addr, ptrHostent-&gt;h_length); 
  } 
  else 
  { 
    addrDest.sin_addr.s_addr = addr; 
  } 
  if (ptrHostent) 
  { 
    addrDest.sin_family = ptrHostent-&gt;h_addrtype; 
  } 
  else 
  { 
    addrDest.sin_family = AF_INET; 
  } 

  // Konvertiert eine Netzwerk Adresse (SOCKADDR_IN) in einen String im Punkt Format (x.x.x.x) 
  dest_ip = inet_ntoa(addrDest.sin_addr); 

  // Gröss des Datenpaketes 
  datasize = 32; 

  if (datasize == 0) 
  { 
     datasize = DEF_PACKET_SIZE; 
  } 

  if (datasize &gt; MAX_PACKET) 
  { 
     os &lt;&lt; &quot;Error: Data size more then &quot; &lt;&lt; MAX_PACKET &lt;&lt; &quot; Bytes or less then 0 Bytes&quot;; 
     MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
    os.str(&quot;&quot;); 

    os &lt;&lt; &quot;I'll take the default size...&quot;; 
    MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
    os.str(&quot;&quot;); 
     datasize = DEF_PACKET_SIZE; 
  } 

  datasize += sizeof(ICMP_HEADER); 

  icmp_data = (char*)malloc(MAX_PACKET); 
  recvbuf = (char*)malloc(MAX_PACKET+sizeof(IP_HEADER)+sizeof(ICMP_HEADER)); 

  if (!icmp_data || !recvbuf) 
  { 
   os &lt;&lt; &quot;Error: Not enough Memory: &quot; &lt;&lt; GetLastError(); 
    MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
   os.str(&quot;&quot;); 
    return 0; 
  } 

  FillIcmpData(icmp_data,datasize); 

  os &lt;&lt; &quot;Ping wird ausgefuehrt fuer &quot; &lt;&lt; ip &lt;&lt; &quot; mit &quot; &lt;&lt; datasize &lt;&lt; &quot; Bytes Daten&quot;; 
  MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
  os.str(&quot;&quot;); 

  while(ping_anzahl&lt;4) 
  { 
    ((ICMP_HEADER*)icmp_data)-&gt;i_cksum = 0; 
    ((ICMP_HEADER*)icmp_data)-&gt;timestamp = GetTickCount(); 

    ((ICMP_HEADER*)icmp_data)-&gt;i_seq = seq_no++; 
    ((ICMP_HEADER*)icmp_data)-&gt;i_cksum = checksum((unsigned short*)icmp_data, datasize); 

    BytesSent = sendto(sockRaw,icmp_data,datasize,0,(SOCKADDR*)&amp;addrDest, sizeof(addrDest)); 

    if (BytesSent == SOCKET_ERROR) 
    { 
      if (WSAGetLastError() == WSAETIMEDOUT) 
      { 
      os &lt;&lt; &quot;Zeitueberschreitung der Anforderung.&quot;; 
        MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
      os.str(&quot;&quot;); 
        //continue; 
      } 
     os &lt;&lt; &quot;sendto failed: &quot; &lt;&lt; WSAGetLastError(); 
     MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
     os.str(&quot;&quot;); 
      return 0; 
    } 
    if (BytesSent &lt; datasize ) 
    { 
      os &lt;&lt;&quot;Wrote &quot; &lt;&lt; BytesSent &lt;&lt; &quot; bytes&quot;; 
      MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION);    
       os.str(&quot;&quot;); 
   } 
    BytesReceived = recvfrom(sockRaw,recvbuf,MAX_PACKET+sizeof(IP_HEADER)+sizeof(ICMP_HEADER),0,(SOCKADDR*)&amp;addrFrom, &amp;addrFromLen); 

   if (BytesReceived == SOCKET_ERROR) 
    { 
      if (WSAGetLastError() == WSAETIMEDOUT) 
      { 
      os &lt;&lt; &quot;Zeitueberschreitung der Anforderung.&quot;; 
      MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
      os.str(&quot;&quot;); 
        //continue; 
      } 
     os &lt;&lt; &quot;recvfrom failed: &quot; &lt;&lt; WSAGetLastError(); 
     MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
     os.str(&quot;&quot;); 
      return 0; 
    } 
    DecodeResponse(recvbuf,BytesReceived,&amp;addrFrom); 
    Sleep(1000); 
   ping_anzahl++; 
  } 

  return 0; 
} 

/* 
Die Antwort die wir empfangen ist ein IP Paket. Wir müssen nun den IP 
Header decodieren um die ICMP Daten lesen zu können 
*/ 

void DecodeResponse(char *buf, int bytes, SOCKADDR_IN *from) 
{ 
  IP_HEADER   *IpHeader; 
  ICMP_HEADER *IcmpHeader; 
  unsigned short IpHeaderLen; 

  IpHeader = (IP_HEADER*)buf; 
  IpHeaderLen = IpHeader-&gt;h_len * 4 ; // number of 32-bit words *4 = bytes 

  if (bytes  &lt; IpHeaderLen + ICMP_MIN) 
  { 
    os &lt;&lt; &quot;Too few bytes from &quot; &lt;&lt; inet_ntoa(from-&gt;sin_addr); 
    MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
    os.str(&quot;&quot;); 
  } 
  IcmpHeader = (ICMP_HEADER*)(buf + IpHeaderLen); 

  if (IcmpHeader-&gt;i_type != ICMP_ECHOREPLY) 
  { 
    if (IcmpHeader-&gt;i_type == ICMP_UNREACHABLE) 
    { 
     os &lt;&lt; &quot;Reply from &quot; &lt;&lt; inet_ntoa(from-&gt;sin_addr); 
     MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
     os.str(&quot;&quot;); 
      if(IcmpHeader-&gt;i_code == ICMP_CODE_HOST_UNREACHABLE) 
      { 
      os &lt;&lt; &quot;: Destination Host unreachable !&quot;; 
      MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
      os.str(&quot;&quot;); 
        return; 
      } 
      if(IcmpHeader-&gt;i_code == ICMP_CODE_NETWORK_UNREACHABLE) 
      { 
      os &lt;&lt; &quot;: Destination Network unreachable !&quot;; 
      MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
      os.str(&quot;&quot;); 
        return; 
      } 
    } 
    else 
    { 
     os &lt;&lt; &quot;non-echo type &quot; &lt;&lt; (int)IcmpHeader-&gt;i_type &lt;&lt;&quot; received&quot;; 
     MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
     os.str(&quot;&quot;); 
      return; 
    } 
  } 

  if (IcmpHeader-&gt;i_id != (unsigned short)GetCurrentProcessId()) 
  { 
   os &lt;&lt; &quot;someone else's packet!&quot; &lt;&lt; endl; 
   MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
   os.str(&quot;&quot;); 
    return; 
  } 

  os &lt;&lt; &quot;Antwort von &quot; &lt;&lt; inet_ntoa(from-&gt;sin_addr) &lt;&lt; &quot;: &quot; &lt;&lt; &quot;Bytes=&quot; &lt;&lt; bytes; 
  os &lt;&lt; &quot; Zeit=&quot; &lt;&lt; GetTickCount()-IcmpHeader-&gt;timestamp &lt;&lt; &quot; ms&quot;; 
  os &lt;&lt; &quot; TTL=&quot; &lt;&lt; static_cast&lt;int&gt;(IpHeader-&gt;ttl); 
  os &lt;&lt; &quot; Icmp_Seq=&quot; &lt;&lt; IcmpHeader-&gt;i_seq; 
  MessageBox(NULL, os.str().c_str(), &quot;info&quot;, MB_OK | MB_ICONINFORMATION); 
  os.str(&quot;&quot;); 
} 

unsigned short checksum(unsigned short *buffer, int size) 
{ 
  unsigned long cksum=0; 
  while(size &gt;1) 
  { 
    cksum+=*buffer++; 
    size -=sizeof(unsigned short); 
  } 

  if(size) 
  { 
    cksum += *(unsigned char*)buffer; 
  } 

  cksum = (cksum &gt;&gt; 16) + (cksum &amp; 0xffff); 
  cksum += (cksum &gt;&gt;16); 
  return (unsigned short)(~cksum); 
} 

/* 
Hilfs Funktion um unseren ICMP Header zu füllen 
*/ 
void FillIcmpData(char * icmp_data, int datasize){ 

  ICMP_HEADER *icmp_hdr; 
  char *datapart; 

  icmp_hdr = (ICMP_HEADER*)icmp_data; 

  icmp_hdr-&gt;i_type = ICMP_ECHO; 
  icmp_hdr-&gt;i_code = 0; 
  icmp_hdr-&gt;i_id = (unsigned short)GetCurrentProcessId(); 
  icmp_hdr-&gt;i_cksum = 0; 
  icmp_hdr-&gt;i_seq = 0; 

  datapart = icmp_data + sizeof(ICMP_HEADER); 
  // Den Buffer mit etwas füllen 
  memset(datapart,'C', datasize - sizeof(ICMP_HEADER)); 
} 

long WinsockStartup() 
{ 
  long rc; 

  WORD wVersionRequested; 
  WSADATA wsaData; 
  wVersionRequested = MAKEWORD(2, 1); 

  rc = WSAStartup( wVersionRequested, &amp;wsaData ); 
  return rc; 
}
</code></pre>
<p>mfg surf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/526193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/526193</guid><dc:creator><![CDATA[surf.]]></dc:creator><pubDate>Mon, 24 May 2004 10:50:06 GMT</pubDate></item><item><title><![CDATA[Reply to Ping-Programm für Windows on Mon, 24 May 2004 20:38:48 GMT]]></title><description><![CDATA[<p>Jo vielen Dank ersmal!!! Nun werden wir uns den mal genauer anschauen und analysieren.</p>
<p>Und bei Fragen werden wir uns wieder an euch wenden .... Der Erste der auf (anhieb lief)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/526605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/526605</guid><dc:creator><![CDATA[piepre]]></dc:creator><pubDate>Mon, 24 May 2004 20:38:48 GMT</pubDate></item></channel></rss>