⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dllping.html

📁 SDK FAQ集
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html lang="en"><head><title>Winsock Programmer's FAQ: Ping: ICMP.DLL Method</title><link rel="Stylesheet" type="text/css" href="../faq.css"></head><body bgcolor="#ffffee" text="#000000" link="#491e00" vlink="#7d2e01" alink="#da7417"><!--  ---- Header Bar ----  --><table border="0" width="95%" bgcolor="#006000" cellpadding="5" cellspacing="3" align="center">	<tr>		<td align="left" bgcolor="#e0e0c0">			<font size="2" face=Verdana,Arial,Helvetica>				<b><a href="../examples/basics/basic-server.html">&lt;&lt;</a></b>			</font>		</td>		<td align="center">			<font face=Verdana,Arial,Helvetica color="#ffffee">				<p align=center class=bigger3><b>				Winsock Programmer's FAQ<br>				Example: Ping, ICMP.DLL Version				</b></p>			</font>			</td>		<td align="right" bgcolor="#e0e0c0">			<font size="2" face=Verdana,Arial,Helvetica>				<b><a href="../examples/rawping.html">&gt;&gt;</a></b>			</font>		</td>	</tr></table><!--  ---- Body Table ----  --><table width="95%" border="0" cellpadding="10">	<tr valign="top">		<td><p>This example shows how to "ping" another machine using Microsoft'sICMP.DLL. This DLL is an undocumented API for sending ICMP echo packets,also called "pings," after the submariner's term for sonar signals. ThisAPI works fine and is present on all current Windows boxes with MicrosoftWinsocks, but Microsoft says they'll replace it as soon as <ahref="rawping.html">something better</a> comes along. (Microsoft's beensaying this since the Windows 95 days, however, yet this functionalitystill exists in Windows 2000.)</p><p>For more information on the ICMP.DLL API, check outsockets.com's <a href="http://www.sockets.com/ms_icmp.htm">ICMPAPI</a> page. There is also a ping example program on <ahref="http://markg.pptnet.com/default.asp">MarkG's</a> Win32 page;the following console mode program was distilled from his GUI version.</p><p>By the way, you might be wondering why the program has to load theICMP.DLL manually and get the procedure addresses manually. I'm not sureof the reasons, but I spent an hour trying to get import libraries andDEF files to work. I can only suggest that some higher power is deadset against you linking this way. :-)</p><hr noshade size=1 color=#404040><h4 class=lmargin><a href="../examples/src/dllping.cpp">dllping.cpp</a></h4><pre><font color="#444444">// Borland C++ 5.0: bcc32.cpp ping.cpp</font><font color="#444444">// Visual C++ 5.0:  cl ping.cpp wsock32.lib</font><font color="0000ff"><strong>#include <font color="#008000">&lt;iostream.h&gt;</font></strong></font><font color="0000ff"><strong>#include <font color="#008000">&lt;winsock.h&gt;</font></strong></font><font color="0000ff"><strong>#include <font color="#008000">&lt;windowsx.h&gt;</font></strong></font><font color="0000ff"><strong>#include <font color="#008000">&quot;icmpdefs.h&quot;</font></strong></font><strong>int</strong> <font color="#2040a0">doit</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">argc</font>, <strong>char</strong><font color="4444FF">*</font> <font color="#2040a0">argv</font><font color="4444FF">[</font><font color="4444FF">]</font><font color="4444FF">)</font><font color="4444FF"><strong>{</strong></font>    <font color="#444444">// Check for correct command-line args</font>    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">argc</font> <font color="4444FF">&lt;</font> <font color="#FF0000">2</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font>        <font color="#2040a0">cerr</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;usage: ping &lt;host&gt;&quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font><font color="4444FF">;</font>        <strong>return</strong> <font color="#FF0000">1</font><font color="4444FF">;</font>    <font color="4444FF"><strong>}</strong></font>        <font color="#444444">// Load the ICMP.DLL</font>    <font color="#2040a0">HINSTANCE</font> <font color="#2040a0">hIcmp</font> <font color="4444FF">=</font> <font color="#2040a0">LoadLibrary</font><font color="4444FF">(</font><font color="#008000">&quot;ICMP.DLL&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">hIcmp</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font>        <font color="#2040a0">cerr</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;Unable to locate ICMP.DLL!&quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font><font color="4444FF">;</font>        <strong>return</strong> <font color="#FF0000">2</font><font color="4444FF">;</font>    <font color="4444FF"><strong>}</strong></font>    <font color="#444444">// Look up an IP address for the given host name</font>    <strong>struct</strong> <font color="#2040a0">hostent</font><font color="4444FF">*</font> <font color="#2040a0">phe</font><font color="4444FF">;</font>    <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">phe</font> <font color="4444FF">=</font> <font color="#2040a0">gethostbyname</font><font color="4444FF">(</font><font color="#2040a0">argv</font><font color="4444FF">[</font><font color="#FF0000">1</font><font color="4444FF">]</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font>        <font color="#2040a0">cerr</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;Could not find IP address for &quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">argv</font><font color="4444FF">[</font><font color="#FF0000">1</font><font color="4444FF">]</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font><font color="4444FF">;</font>        <strong>return</strong> <font color="#FF0000">3</font><font color="4444FF">;</font>    <font color="4444FF"><strong>}</strong></font>    <font color="#444444">// Get handles to the functions inside ICMP.DLL that we'll need</font>    <strong>typedef</strong> <font color="#2040a0">HANDLE</font> <font color="4444FF">(</font><font color="#2040a0">WINAPI</font><font color="4444FF">*</font> <font color="#2040a0">pfnHV</font><font color="4444FF">)</font><font color="4444FF">(</font><font color="#2040a0">VOID</font><font color="4444FF">)</font><font color="4444FF">;</font>    <strong>typedef</strong> <font color="#2040a0">BOOL</font> <font color="4444FF">(</font><font color="#2040a0">WINAPI</font><font color="4444FF">*</font> <font color="#2040a0">pfnBH</font><font color="4444FF">)</font><font color="4444FF">(</font><font color="#2040a0">HANDLE</font><font color="4444FF">)</font><font color="4444FF">;</font>    <strong>typedef</strong> <font color="#2040a0">DWORD</font> <font color="4444FF">(</font><font color="#2040a0">WINAPI</font><font color="4444FF">*</font> <font color="#2040a0">pfnDHDPWPipPDD</font><font color="4444FF">)</font><font color="4444FF">(</font><font color="#2040a0">HANDLE</font>, <font color="#2040a0">DWORD</font>, <font color="#2040a0">LPVOID</font>, <font color="#2040a0">WORD</font>,            <font color="#2040a0">PIP_OPTION_INFORMATION</font>, <font color="#2040a0">LPVOID</font>, <font color="#2040a0">DWORD</font>, <font color="#2040a0">DWORD</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#444444">// evil, no?</font>    <font color="#2040a0">pfnHV</font> <font color="#2040a0">pIcmpCreateFile</font><font color="4444FF">;</font>    <font color="#2040a0">pfnBH</font> <font color="#2040a0">pIcmpCloseHandle</font><font color="4444FF">;</font>    <font color="#2040a0">pfnDHDPWPipPDD</font> <font color="#2040a0">pIcmpSendEcho</font><font color="4444FF">;</font>    <font color="#2040a0">pIcmpCreateFile</font> <font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">pfnHV</font><font color="4444FF">)</font><font color="#2040a0">GetProcAddress</font><font color="4444FF">(</font><font color="#2040a0">hIcmp</font>,            <font color="#008000">&quot;IcmpCreateFile&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>    <font color="#2040a0">pIcmpCloseHandle</font> <font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">pfnBH</font><font color="4444FF">)</font><font color="#2040a0">GetProcAddress</font><font color="4444FF">(</font><font color="#2040a0">hIcmp</font>,            <font color="#008000">&quot;IcmpCloseHandle&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>    <font color="#2040a0">pIcmpSendEcho</font> <font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">pfnDHDPWPipPDD</font><font color="4444FF">)</font><font color="#2040a0">GetProcAddress</font><font color="4444FF">(</font><font color="#2040a0">hIcmp</font>,            <font color="#008000">&quot;IcmpSendEcho&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>    <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">pIcmpCreateFile</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font> <font color="4444FF">|</font><font color="4444FF">|</font> <font color="4444FF">(</font><font color="#2040a0">pIcmpCloseHandle</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font> <font color="4444FF">|</font><font color="4444FF">|</font>             <font color="4444FF">(</font><font color="#2040a0">pIcmpSendEcho</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font>        <font color="#2040a0">cerr</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;Failed to get proc addr for function.&quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font><font color="4444FF">;</font>        <strong>return</strong> <font color="#FF0000">4</font><font color="4444FF">;</font>    <font color="4444FF"><strong>}</strong></font>    <font color="#444444">// Open the ping service</font>    <font color="#2040a0">HANDLE</font> <font color="#2040a0">hIP</font> <font color="4444FF">=</font> <font color="#2040a0">pIcmpCreateFile</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">hIP</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">INVALID_HANDLE_VALUE</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font>        <font color="#2040a0">cerr</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;Unable to open ping service.&quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font><font color="4444FF">;</font>        <strong>return</strong> <font color="#FF0000">5</font><font color="4444FF">;</font>    <font color="4444FF"><strong>}</strong></font>       <font color="#444444">// Build ping packet</font>    <strong>char</strong> <font color="#2040a0">acPingBuffer</font><font color="4444FF">[</font><font color="#FF0000">64</font><font color="4444FF">]</font><font color="4444FF">;</font>    <font color="#2040a0">memset</font><font color="4444FF">(</font><font color="#2040a0">acPingBuffer</font>, '\<font color="#2040a0">xAA</font>', <strong>sizeof</strong><font color="4444FF">(</font><font color="#2040a0">acPingBuffer</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>    <font color="#2040a0">PIP_ECHO_REPLY</font> <font color="#2040a0">pIpe</font> <font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">PIP_ECHO_REPLY</font><font color="4444FF">)</font><font color="#2040a0">GlobalAlloc</font><font color="4444FF">(</font>            <font color="#2040a0">GMEM_FIXED</font> <font color="4444FF">|</font> <font color="#2040a0">GMEM_ZEROINIT</font>,            <strong>sizeof</strong><font color="4444FF">(</font><font color="#2040a0">IP_ECHO_REPLY</font><font color="4444FF">)</font> <font color="4444FF">+</font> <strong>sizeof</strong><font color="4444FF">(</font><font color="#2040a0">acPingBuffer</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">pIpe</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -