有没有办法用C ping特定的IP地址?

有没有办法用C ping特定的IP地址? 如果我想用一定数量的ping,或者就本地地址ping“www.google.com”,我需要一个程序来执行此操作。 我如何从C ping?

还没有接受的答案,我偶然发现了这个问题,同时试图完全按照这里的要求进行,所以我想在这里提到Aif的答案。
以下代码基于他的示例,并在子进程中ping Google的公共DNS,并在父进程中输出输出。

 #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; } 

您可以使用原始套接字来制作自己的ICMP数据包 ,但这远非微不足道。 ping(1)的源代码是开始确定如何执行此操作的好地方(它使用类似BSD的许可证;请参阅完整许可证的源代码)。 请记住,原始套接字在Linux上需要root权限,因此您的程序需要setuid root。

当然,更容易实现ping(1)可执行文件,而不必自己处理任何这些。 您不必担心代码许可,并且您的程序不需要root权限(假设它不需要其他东西)。 system(3)popen(3)fork(3) / exec(3)是你的朋友。

您必须学习套接字,解析要ping的主机,发送适当的ICMP包并听取响应。 标准库中没有pingfunction。 但是,有许多更高级别的网络库已经实现了该协议。