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

📄 ch18_08.htm

📁 By Tom Christiansen and Nathan Torkington ISBN 1-56592-243-3 First Edition, published August 1998
💻 HTM
字号:
<HTML><HEAD><TITLE>Recipe 18.7. Pinging a Machine (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen &amp; Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:45:06Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch18_01.htm"TITLE="18. Internet Services"><LINKREL="prev"HREF="ch18_07.htm"TITLE="18.6. Simulating Telnet from a Program"><LINKREL="next"HREF="ch18_09.htm"TITLE="18.8. Using Whois to Retrieve Information from the InterNIC"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch18_07.htm"TITLE="18.6. Simulating Telnet from a Program"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 18.6. Simulating Telnet from a Program"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch18_01.htm"TITLE="18. Internet Services"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch18_09.htm"TITLE="18.8. Using Whois to Retrieve Information from the InterNIC"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 18.8. Using Whois to Retrieve Information from the InterNIC"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch18-chap18_pinging_0">18.7. Pinging a Machine</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch18-pgfId-927">Problem<ACLASS="indexterm"NAME="ch18-idx-1000004321-0"></A><ACLASS="indexterm"NAME="ch18-idx-1000004321-1"></A><ACLASS="indexterm"NAME="ch18-idx-1000004321-2"></A></A></H3><PCLASS="para">You want to test whether a machine is alive. Network and system monitoring software often use the <CODECLASS="literal">ping</CODE> program as an indicator of availability.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch18-pgfId-933">Solution</A></H3><PCLASS="para">Use the standard Net::Ping module:</P><PRECLASS="programlisting">use Net::Ping;$p = Net::Ping-&gt;new()    or die &quot;Can't create new ping object: $!\n&quot;;print &quot;$host is alive&quot; if $p-&gt;ping($host);$p-&gt;close;</PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch18-pgfId-951">Discussion</A></H3><PCLASS="para">Testing whether a machine is up isn't as easy as it sounds. It's not only possible but it's also unpleasantly common for machines to respond to the <EMCLASS="emphasis">ping</EM> command and have no working services. It's better to think of a <EMCLASS="emphasis">ping</EM> as testing whether a machine is reachable, rather than whether the machine is doing its job. To check the latter, you must try to use its services (telnet, FTP, web, NFS, etc).</P><PCLASS="para">In the form shown in the Solution, Net::Ping attempts to connect to the UDP <EMCLASS="emphasis">echo</EM> port (port number 7) on the remote machine, send a datagram, and receive the echoed response. The machine is considered unreachable if it can't connect, if the reply datagram isn't received, or if the reply differs from the original datagram. The <CODECLASS="literal">ping</CODE> method returns true if the machine was reachable, false otherwise.</P><PCLASS="para">You can also ping using other protocols by passing the protocol name to <CODECLASS="literal">new</CODE>. Valid protocols are <EMCLASS="emphasis">tcp</EM>, <EMCLASS="emphasis">udp</EM>, and <EMCLASS="emphasis">icmp</EM> (all lowercase). A TCP ping attempts to connect to the echo port (TCP port 7) on the remote machine, and returns true if the connection could be established, false otherwise (unlike UDP ping, no data is sent to be echoed). An ICMP ping uses the ICMP protocol, as does the <EMCLASS="emphasis">ping </EM>(8) command. On Unix machines, you must be the superuser to use the ICMP protocol:</P><PRECLASS="programlisting"># use TCP if we're not root, ICMP if we are$pong = Net::Ping-&gt;new( $&gt; ? &quot;tcp&quot; : &quot;icmp&quot; );(defined $pong)    or die &quot;Couldn't create Net::Ping object: $!\n&quot;;if ($pong-&gt;ping(&quot;kingkong.com&quot;)) {    print &quot;The giant ape lives!\n&quot;;} else {    print &quot;All hail mighty Gamera, friend of children!\n&quot;;}</PRE><PCLASS="para">All these ping methods are prone to failure. Some sites filter the ICMP protocol at their router, so Net::Ping will say such machines are down even though you can connect using other protocols. Similarly, many machines disable the TCP and UDP <EMCLASS="emphasis">echo</EM> services, causing TCP and UDP pings to fail. There is no way to know whether the ping failed because the service is disabled or filtered, or because the machine is actually down.<ACLASS="indexterm"NAME="ch18-idx-1000004323-0"></A><ACLASS="indexterm"NAME="ch18-idx-1000004323-1"></A><ACLASS="indexterm"NAME="ch18-idx-1000004323-2"></A></P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch18-pgfId-985">See Also</A></H3><PCLASS="para">The documentation for the Net::Ping module from CPAN; your system's <ICLASS="filename">ping </I>(8), <ICLASS="filename">tcp </I>(4), <ICLASS="filename">udp</I> (4), and <ICLASS="filename">icmp </I>(4) manpages (if you have them); RFC 792 and 950</P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch18_07.htm"TITLE="18.6. Simulating Telnet from a Program"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 18.6. Simulating Telnet from a Program"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="book"HREF="index.htm"TITLE="Perl Cookbook"><IMGSRC="../gifs/txthome.gif"ALT="Perl Cookbook"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch18_09.htm"TITLE="18.8. Using Whois to Retrieve Information from the InterNIC"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 18.8. Using Whois to Retrieve Information from the InterNIC"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228">18.6. Simulating Telnet from a Program</TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="index"HREF="index/index.htm"TITLE="Book Index"><IMGSRC="../gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228">18.8. Using Whois to Retrieve Information from the InterNIC</TD></TR></TABLE><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><FONTSIZE="-1"></DIV<!-- LIBRARY NAV BAR --> <img src="../gifs/smnavbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links"><p> <a href="copyrght.htm">Copyright &copy; 2002</a> O'Reilly &amp; Associates. All rights reserved.</font> </p> <map name="library-map"> <area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map> </BODY></HTML>

⌨️ 快捷键说明

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