有没有办法用C ping特定的IP地址? 如果我想用一定数量的ping或者就此问题使用本地地址ping“www.google.com”,那么我需要一个程序来做到这一点。我怎么能从C中ping?有没有办法用C ping特定的IP地址?
回答
你将不得不学习套接字,解析你想ping的主机,发送合适的ICMP包并监听响应。标准库中没有ping
函数。但是,有很多高级网络库已经实现了该协议。
我将如何找到网络/ gen文件?当我尝试编译时,它们似乎无法使用! –
你可以使用raw sockets自己ICMP packets手艺,但是,从琐碎的远。 source code for ping(1)
是一个很好的开始了解如何做到这一点(它使用类似BSD的许可证;请参阅完整许可证的源代码)。请记住,原始套接字在Linux上需要root权限,因此您的程序需要setuid root。
当然,更容易掏出ping(1)
可执行文件,而无需亲自处理任何这种情况。您不必担心代码授权,并且您的程序不需要root权限(假设它不再需要它们)。 system(3)
,popen(3)
和fork(3)
/exec(3)
是你的朋友。
我希望你对系统/ exec ping方法给出了更好的解释。这会非常有帮助。 – CaptainBli
目前还没有公认的答案,我偶然发现了这个问题,同时试图完成这里提出的问题,所以我想参考Aif's答案here。
以下代码基于他的示例,并将Google的公有DNS放入子进程中,并在父进程中输出输出。
#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. 有没有办法在终端中用特定名称替换IP地址?
- 2. Linux有没有办法使用C/C++永久设置IP地址?
- 3. 有没有办法找出IP地址是否属于iPhone?
- 4. 无法ping特定的ip
- 5. 有没有办法找到我局域网内所有用户的IP地址?
- 6. 有没有办法从Cocoa中给定的URL获取IP地址?
- 7. 有没有办法让android设备回复到广播地址的icmp ping?
- 8. 有没有办法缩短查找本地IP地址的命令?
- 9. 有没有办法在Virtualbox通过DHCP分配的VagrantFile中使用IP地址?
- 10. win32_networkaddressconfiguration没有IP地址
- 11. Ping一个IP地址
- 12. 无法ping任何whm IP地址
- 13. REST响应没有从一个特定的IP地址
- 14. 有没有办法在Wamp中配置一个特定的文件夹来创建IP地址
- 15. 有没有办法将Ruby Net :: HTTP请求附加到特定的IP地址/网络接口?
- 16. Ping使用Javascript的IP地址列表
- 17. 有没有办法在可调用方法中使用参数?
- 18. 是否有任何可用于Ping IP地址的PHP脚本
- 19. Shorewall:如何启用ping到包含该IP的区域禁用Ping的特定IP地址
- 20. 有没有办法禁止IP地址访问我的分析服务器?
- 21. Netsuite:有没有办法拥有专门的装运地址和帐单地址?
- 22. 有没有办法根据手机号码从手机获取WAN IP地址?
- 23. 有没有办法从JMS消息中获取起始IP地址?
- 24. Javascript:有没有办法在上线时自动将localhost更改为IP地址
- 25. 如何使用JavaScript ping IP地址
- 26. 有没有办法使用EMail地址作为用户名?
- 27. 有没有办法让特定国家/地区的所有地点(经纬度)?
- 28. 没有得到codeigniter的IP地址
- 29. 没有IP地址的通信
- 30. 调用具有特定IP地址的路由
使用'socket' API('man socket')。 –
为什么你要ping谷歌,假设你不为Google工作? – dbasnett
它是特定于操作系统的。 “www.google.com”不是IP地址(但是“192.168.2.34”是一个)。 –