Indipendentemente dal linguaggio, in linea di massima: dovrai costruire la struttura del pacchetto ICMP (type, code, checksum, id e ovviamente payload, se non ricordo male) e mandarla banalmente mediante un socket RAW.
Successivamente dovrai ricevere l'ECHOREPLY di ritorno o col medesimo socket RAW funzionante a mo' di sniffer oppure utilizzando una libreria di sniffing apposita (esempio pcap). Col primo metodo ti risparmi sicuramente codice.

Qui vi è un'implementazione di ping in python:
http://oss.coresecurity.com/impacket/ping.py
...che utilizza un binding a pcap per ricevere l'ECHOREPLY di ritorno.
Come puoi vedere non è niente di troppo complesso.