📄 rawping.html
字号:
<font color="#2040a0">cerr</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">"Unknown ICMP packet type "</font> <font color="4444FF"><</font><font color="4444FF"><</font> <strong>int</strong><font color="4444FF">(</font><font color="#2040a0">icmphdr</font><font color="4444FF">-</font><font color="4444FF">></font><font color="#2040a0">type</font><font color="4444FF">)</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">" received"</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#2040a0">endl</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <strong>return</strong> <font color="4444FF">-</font><font color="#FF0000">1</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <font color="#444444">// If "TTL expired", fall through. Next test will fail if we</font> <font color="#444444">// try it, so we need a way past it.</font> <font color="4444FF"><strong>}</strong></font> <strong>else</strong> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">icmphdr</font><font color="4444FF">-</font><font color="4444FF">></font><font color="#2040a0">id</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">USHORT</font><font color="4444FF">)</font><font color="#2040a0">GetCurrentProcessId</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <font color="#444444">// Must be a reply for another pinger running locally, so just</font> <font color="#444444">// ignore it.</font> <strong>return</strong> <font color="4444FF">-</font><font color="#FF0000">2</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <font color="#444444">// Figure out how far the packet travelled</font> <strong>int</strong> <font color="#2040a0">nHops</font> <font color="4444FF">=</font> <strong>int</strong><font color="4444FF">(</font><font color="#FF0000">256</font> <font color="4444FF">-</font> <font color="#2040a0">reply</font><font color="4444FF">-</font><font color="4444FF">></font><font color="#2040a0">ttl</font><font color="4444FF">)</font><font color="4444FF">;</font> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">nHops</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">192</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <font color="#444444">// TTL came back 64, so ping was probably to a host on the</font> <font color="#444444">// LAN -- call it a single hop.</font> <font color="#2040a0">nHops</font> <font color="4444FF">=</font> <font color="#FF0000">1</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <strong>else</strong> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">nHops</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">128</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <font color="#444444">// Probably localhost</font> <font color="#2040a0">nHops</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <font color="#444444">// Okay, we ran the gamut, so the packet must be legal -- dump it</font> <font color="#2040a0">cout</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#2040a0">endl</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#2040a0">bytes</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">" bytes from "</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#2040a0">inet_ntoa</font><font color="4444FF">(</font><font color="#2040a0">from</font><font color="4444FF">-</font><font color="4444FF">></font><font color="#2040a0">sin_addr</font><font color="4444FF">)</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">", icmp_seq "</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#2040a0">icmphdr</font><font color="4444FF">-</font><font color="4444FF">></font><font color="#2040a0">seq</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">", "</font><font color="4444FF">;</font> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">icmphdr</font><font color="4444FF">-</font><font color="4444FF">></font><font color="#2040a0">type</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">ICMP_TTL_EXPIRE</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <font color="#2040a0">cout</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">"TTL expired."</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#2040a0">endl</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <strong>else</strong> <font color="4444FF"><strong>{</strong></font> <font color="#2040a0">cout</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#2040a0">nHops</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">" hop"</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="4444FF">(</font><font color="#2040a0">nHops</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">1</font> ? <font color="#008000">""</font> <font color="4444FF">:</font> <font color="#008000">"s"</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">cout</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">", time: "</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="4444FF">(</font><font color="#2040a0">GetTickCount</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">-</font> <font color="#2040a0">icmphdr</font><font color="4444FF">-</font><font color="4444FF">></font><font color="#2040a0">timestamp</font><font color="4444FF">)</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#008000">" ms."</font> <font color="4444FF"><</font><font color="4444FF"><</font> <font color="#2040a0">endl</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <strong>return</strong> <font color="#FF0000">0</font><font color="4444FF">;</font><font color="4444FF"><strong>}</strong></font></pre><hr noshade size=1 color=#404040><h4 class=lmargin><a href="../examples/src/ip_checksum.cpp">ip_checksum.cpp</a></h4><pre><font color="#444444">/*********************************************************************** ip_checksum.cpp - Calculates IP-style checksums on a block of data.***********************************************************************/</font><font color="0000ff"><strong>#define WIN32_LEAN_AND_MEAN</strong></font><font color="0000ff"><strong>#include <font color="#008000"><windows.h></font></strong></font><font color="#2040a0">USHORT</font> <font color="#2040a0">ip_checksum</font><font color="4444FF">(</font><font color="#2040a0">USHORT</font><font color="4444FF">*</font> <font color="#2040a0">buffer</font>, <strong>int</strong> <font color="#2040a0">size</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">cksum</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font> <font color="#444444">// Sum all the words together, adding the final byte if size is odd</font> <strong>while</strong> <font color="4444FF">(</font><font color="#2040a0">size</font> <font color="4444FF">></font> <font color="#FF0000">1</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <font color="#2040a0">cksum</font> <font color="4444FF">+</font><font color="4444FF">=</font> <font color="4444FF">*</font><font color="#2040a0">buffer</font><font color="4444FF">+</font><font color="4444FF">+</font><font color="4444FF">;</font> <font color="#2040a0">size</font> <font color="4444FF">-</font><font color="4444FF">=</font> <strong>sizeof</strong><font color="4444FF">(</font><font color="#2040a0">USHORT</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">size</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <font color="#2040a0">cksum</font> <font color="4444FF">+</font><font color="4444FF">=</font> <font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">UCHAR</font><font color="4444FF">*</font><font color="4444FF">)</font><font color="#2040a0">buffer</font><font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font> <font color="#444444">// Do a little shuffling</font> <font color="#2040a0">cksum</font> <font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">cksum</font> <font color="4444FF">></font><font color="4444FF">></font> <font color="#FF0000">16</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="4444FF">(</font><font color="#2040a0">cksum</font> <font color="4444FF">&</font> <font color="#FF0000">0xffff</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">cksum</font> <font color="4444FF">+</font><font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">cksum</font> <font color="4444FF">></font><font color="4444FF">></font> <font color="#FF0000">16</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#444444">// Return the bitwise complement of the resulting mishmash</font> <strong>return</strong> <font color="4444FF">(</font><font color="#2040a0">USHORT</font><font color="4444FF">)</font><font color="4444FF">(</font>~<font color="#2040a0">cksum</font><font color="4444FF">)</font><font color="4444FF">;</font><font color="4444FF"><strong>}</strong></font></pre><hr noshade size=1 color=#404040><h4 class=lmargin><a href="../examples/src/rawping.h">rawping.h</a></h4><pre><font color="#444444">/*********************************************************************** rawping.h - Declares the types, constants and prototypes required to use the rawping.cpp module.***********************************************************************/</font><font color="0000ff"><strong>#define WIN32_LEAN_AND_MEAN</strong></font><font color="0000ff"><strong>#include <font color="#008000"><winsock2.h></font></strong></font><font color="#444444">// ICMP packet types</font><font color="0000ff"><strong>#define ICMP_ECHO_REPLY 0</strong></font><font color="0000ff"><strong>#define ICMP_DEST_UNREACH 3</strong></font><font color="0000ff"><strong>#define ICMP_TTL_EXPIRE 11</strong></font><font color="0000ff"><strong>#define ICMP_ECHO_REQUEST 8</strong></font><font color="#444444">// Minimum ICMP packet size, in bytes</font><font color="0000ff"><strong>#define ICMP_MIN 8</strong></font><font color="0000ff"><strong>#ifdef _MSC_VER</strong></font><font color="#444444">// The following two structures need to be packed tightly, but unlike</font><font color="#444444">// Borland C++, Microsoft C++ does not do this by default.</font><font color="0000ff"><strong>#pragma pack(1)</strong></font><font color="0000ff"><strong>#endif</strong></font><font color="#444444">// The IP header</font><strong>struct</strong> <font color="#2040a0">IPHeader</font> <font color="4444FF"><strong>{</strong></font> <font color="#2040a0">BYTE</font> <font color="#2040a0">h_len</font><font color="4444FF">:</font><font color="#FF0000">4</font><font color="4444FF">;</font> <font color="#444444">// Length of the header in dwords</font> <font c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -