Esiste un modo per eseguire il ping di un indirizzo IP specifico con C? Se volessi eseguire il ping di "www.google.com" con un certo numero di ping, o se fosse per questo, un indirizzo locale, avrei bisogno di un programma per farlo. Come posso eseguire il ping da C?Esiste un modo per eseguire il ping di un indirizzo IP specifico con C?
risposta
È necessario apprendere i socket, risolvere l'host che si desidera eseguire il ping, inviare i pacchetti ICMP appropriati e ascoltare una risposta. Non esiste la funzione ping
nella libreria standard. Tuttavia, ci sono molte librerie di rete di livello superiore che già implementano il protocollo.
Questo è il più semplice che ho trovato.
http://www.cise.ufl.edu/~cop4600/cgi-bin/lxr/http/source.cgi/commands/simple/ping.c
Come trovo i file net/gen? Sembrano non essere disponibili quando cerco e compilo! –
Si potrebbe creare il proprio ICMP packets utilizzando raw sockets, ma questo è tutt'altro che banale. Il source code for ping(1)
è un buon punto di partenza per capire come farlo (usa una licenza simile a BSD, vedere il codice sorgente per la licenza completa). Tieni presente che i socket raw richiedono i privilegi di root su Linux, quindi il tuo programma dovrà essere impostato come root.
Ovviamente, è molto più semplice eseguire il file eseguibile ping(1)
e non dover gestire autonomamente tutto ciò. Non dovrai preoccuparti delle licenze di codice e il tuo programma non avrà bisogno dei privilegi di root (supponendo che non sia già necessario per qualcos'altro). system(3)
, popen(3)
e fork(3)
/exec(3)
sono i tuoi amici.
Mi auguro che tu abbia fornito una spiegazione migliore del metodo system/exec ping. Questo sarebbe stato estremamente utile. – CaptainBli
Non c'è ancora una risposta accettata e mi sono imbattuto in questa domanda mentre cercavo di fare esattamente ciò che è stato chiesto qui, quindi volevo fare riferimento a Aif's risposta here.
Il seguente codice è basato sul suo esempio e ping DNS pubblico di Google in un processo figlio e stampa l'output nel processo padre.
#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. Eseguire sails.js su un indirizzo IP specifico durante lo sviluppo
- 2. Ping di un intervallo IP con Scapy
- 3. come eseguire il ping di ogni IP in un file?
- 4. expressjs associare a un indirizzo IP specifico
- 5. Python: Ottieni indirizzo IP locale utilizzato per inviare dati IP a uno specifico indirizzo IP remoto
- 6. Come ottenere il proprio indirizzo IP con un indirizzo socket?
- 7. Come eseguire il meteor server su un indirizzo IP diverso?
- 8. Invia richiesta SOAP da un indirizzo IP specifico
- 9. Geocode un indirizzo IP?
- 10. Pingare un indirizzo IP usando PHP e riecheggiando il risultato
- 11. Componi con un indirizzo/interfaccia specifico? Golang
- 12. C++ Indirizzo IP forma leggibile
- 13. In test del controller Rails, esiste un modo per simulare un IP remoto specifico?
- 14. Convalida un indirizzo IP (con maschera)
- 15. C'è un modo per allegare la richiesta Ruby Net :: HTTP a uno specifico indirizzo IP/interfaccia di rete?
- 16. In che modo ping risolve l'indirizzo IP?
- 17. Come determinare se un indirizzo IP appartiene a un paese
- 18. Ascolto di un diverso indirizzo IP
- 19. Come posso eseguire il ping di un host con una linea singola Perl con Net :: Ping?
- 20. indirizzo IP firmato cloudfront indirizzo IP
- 21. Esiste un modo per eseguire Trac offline?
- 22. Esiste un modo specifico per Scala per implementare l'esecuzione periodica?
- 23. Ottenere il mio indirizzo IP
- 24. Risoluzione di un indirizzo IP da DNS in C#
- 25. Sklearn: Esiste un modo per eseguire il debug di Pipelines?
- 26. Conversione di un int a un indirizzo IP
- 27. Ottieni il proprio indirizzo IP
- 28. Risoluzione indirizzo IP di un nome host
- 29. Come imitare un indirizzo IP - Simulatore di dispositivo richiesto
- 30. Come eseguire un ping più veloce quando raggiungo un IP non raggiungibile?
Utilizzare l'API 'socket' (' man socket'). –
Perché dovresti eseguire il ping su Google, supponendo che non lavori per Google? – dbasnett
È specifico del sistema operativo. E 'www.google.com' non è un indirizzo IP (ma' 192.168.2.34' è uno). –