有沒有辦法用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」是一個)。 –