This sample C program illustrates how an ICMP ping app can be written using the SOCK_RAW socket type and IPPROTO_ICMP protocol.

By creating a raw socket, the underlying layer does not change the protocol header so that when we submit the ICMP header nothing is changed so that the receiving end will see an ICMP packet. Additionally, we use the record route IP option to get a round trip path to the endpoint. Note that the size of the IP option header that records the route is limited to nine IP addresses.

ICMP Ping - C Implementation

Internet Control Message Protocol (ICMP) Ping – C Program

cl -o Ping Ping.c ws2_32.lib /Zp1

Command Line Options/Parameters
Ping [host] [packet-size]
host String name of host to ping
packet-size Integer size of packet to send (smaller than 1024 bytes)