¿Hay alguna manera de hacer ping a una dirección IP específica con C?

¿Hay alguna manera de hacer ping a una dirección IP específica con C? Si quisiera hacer ping en “www.google.com” con un número determinado de pings, o para el caso, una dirección local, necesitaría un progtwig para hacerlo. ¿Cómo puedo hacer ping desde C?

Todavía no hay una respuesta aceptada y me topé con esta pregunta mientras trataba de hacer exactamente lo que se pedía aquí, así que quería referirme a la respuesta de Aif aquí .
El siguiente código se basa en su ejemplo y hace ping al DNS público de Google en un proceso secundario e imprime el resultado en el proceso principal.

 #include  #include  #include  #define BUFLEN 1024 int main(int argc, char **argv) { int pipe_arr[2]; char buf[BUFLEN]; //Create pipe - pipe_arr[0] is "reading end", pipe_arr[1] is "writing end" pipe(pipe_arr); if(fork() == 0) //child { dup2(pipe_arr[1], STDOUT_FILENO); execl("/sbin/ping", "ping", "-c 1", "8.8.8.8", (char*)NULL); } else //parent { wait(NULL); read(pipe_arr[0], buf, BUFLEN); printf("%s\n", buf); } close(pipe_arr[0]); close(pipe_arr[1]); return 0; } 

Puedes crear tus propios paquetes ICMP utilizando sockets sin procesar , pero eso no es nada trivial. El código fuente para ping(1) es un buen lugar para comenzar a descubrir cómo hacerlo (usa una licencia tipo BSD; consulte el código fuente para obtener la licencia completa). Tenga en cuenta que los sockets sin formato requieren privilegios de root en Linux, por lo que su progtwig deberá ser root de setuid.

Por supuesto, es mucho más fácil pagar el ejecutable ping(1) y no tener que lidiar con nada de esto usted mismo. No tendrá que preocuparse por las licencias de código, y su progtwig no necesitará privilegios de root (asumiendo que no los necesita para otra cosa). system(3) , popen(3) y fork(3) / exec(3) son tus amigos.

Tendría que aprender sockets, resolver el host al que desea hacer ping, enviar los paquetes ICMP apropiados y escuchar una respuesta. No hay ninguna función de ping en la biblioteca estándar. Sin embargo, hay muchas bibliotecas de red de nivel superior que ya implementan el protocolo.