Originally posted here by gore
ICMP deals in error checking and so on. The user interface for ICMP is the ping program. You can use ping to send ICMP packets and see if something responds with "Hello, I'm up and running"

ping 192.168.0.1

{192.168.0.1} Hello, I'm up and running.

Of course you can set hardware and software to NOT respond to ping.
Come on gore.. I expect better from you ..... ICMP TYPE 8 is ICMP ECHO REQUEST which is what ping is a user interface for, and the client should (if not blocking) responde with an ICMP TYPE 0 (ECHO REPLY)... However ping is not the user interface for all ICMP. how about Type 30 which is traceroute or type 13 which is timestamp. There are many programs that make use of ICMP and provide a front-end for users to form ICMP packets and requests. The best one, IMHO, is sing (http://sourceforge.net/projects/sing). ICMP is quite an amazing protocol. You can do a lot of basic (and sometimes more advanced) osdetection using only a few ICMP packets. A good example is the TTL field in the ping reply. This can be changed on most operating systems, but if you assume the default is set you can usually get a pretty good idea as to what OS the person is running.

Peace,

HT