¿Hay alguna manera de hacer ping a una dirección IP específica con C? Si quisiera hacer ping a "www.google.com" con un cierto número de ping, o para el caso, una dirección local, necesitaría un programa para hacerlo. ¿Cómo puedo hacer ping desde C?¿Hay alguna forma de hacer ping a una dirección IP específica con C?
Respuesta
Tendría que aprender sockets, resolver el host al que desea hacer ping, enviar los paquetes ICMP apropiados y escuchar una respuesta. No hay una función ping
en la biblioteca estándar. Sin embargo, hay muchas bibliotecas de red de nivel superior que ya implementan el protocolo.
Esto es lo más simple que encontré.
http://www.cise.ufl.edu/~cop4600/cgi-bin/lxr/http/source.cgi/commands/simple/ping.c
¿Cómo puedo ubicar los archivos net/gen? ¡Parece que no están disponibles cuando intento compilar! –
Se podría crear su propia ICMP packets usando raw sockets, pero que está lejos de ser trivial. El source code for ping(1)
es un buen lugar para comenzar a descubrir cómo hacerlo (utiliza una licencia similar a BSD, vea el código fuente de la licencia completa). Tenga en cuenta que los sockets sin formato requieren privilegios de root en Linux, por lo que su programa necesitará ser root 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 la licencia del código, y su programa no necesitará privilegios de root (suponiendo que ya no los necesite para otra cosa). system(3)
, popen(3)
y fork(3)
/exec(3)
son tus amigos.
Deseo que haya dado una mejor explicación del método de sistema/ejecución. Esto hubiera sido extremadamente útil. – CaptainBli
Todavía no hay una respuesta aceptada y me encontré con esta pregunta al tratar de hacer exactamente lo que se solicitó aquí, así que quería referirme a Aif's respuesta here.
El siguiente código se basa en su ejemplo y hace ping en el DNS público de Google en un proceso hijo e imprime el resultado en el proceso principal.
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#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;
}
- 1. expressjs enlazar a una dirección IP específica
- 2. ¿Hay alguna forma de adjuntar la solicitud de Ruby Net :: HTTP a una dirección IP/interfaz de red específica?
- 3. Hacer ping a una dirección IP usando PHP y hacer eco del resultado
- 4. En las pruebas de controlador de Rails, ¿hay alguna forma de simular una IP remota específica?
- 5. Hacer ping en un rango de IP con Scapy
- 6. ¿alguna forma de "hacer ping" un número de teléfono?
- 7. Python: obtenga la dirección IP local utilizada para enviar datos IP a una dirección IP remota específica
- 8. ¿Hay alguna forma de encontrar la dirección de una referencia?
- 9. ¿Hay alguna forma de obtener una dirección de referencia?
- 10. Cómo hacer ping a IP externa desde Java Android
- 11. Enviar un ping a cada IP en una subred
- 12. ¿Hay alguna forma de obtener la dirección IP de origen de un mensaje JMS?
- 13. ¿Cuál es la forma más fácil de recordar la dirección IP que se puede hacer ping públicamente?
- 14. problema de ping una dirección URL de C#
- 15. ¿Cómo puedo hacer Compojure escuchar a una sola dirección IP
- 16. Validar una dirección IP (con máscara)
- 17. Enviar solicitud SOAP desde una dirección IP específica
- 18. ¿Hay forma de hacer coincidir la IP con IP + CIDR directamente desde la consulta SELECT?
- 19. Entero a la dirección IP - C
- 20. C# Dirección IP de cadena
- 21. ¿Cómo hacer que JMX se una a una interfaz específica?
- 22. Geocodificar una dirección IP?
- 23. Cómo validar una dirección IP en C#
- 24. ¿Cómo acceder/hacer ping a un servidor ubicado en AWS?
- 25. Ping con java a multiplataforma
- 26. Enlazar IIS Express a una dirección IP
- 27. ¿Hay alguna forma de hacer un PUT con WebClient?
- 28. Convirtiendo un int a una dirección IP
- 29. ¿Hay alguna forma de obtener la dirección de un registro?
- 30. ¿Hay alguna forma de hacer variables como $ a y $ b con respecto a strict?
Utilice la API 'socket' (' man socket'). –
¿Por qué le gustaría hacer ping a Google, suponiendo que no trabaje para Google? – dbasnett
Es un sistema operativo específico. Y 'www.google.com' no es una dirección IP (pero' 192.168.2.34' es uno). –