我想要構建一個代碼,只要給出一個IP地址就可以打印可達或不可訪問的最終結果。我想我們必須使用ping命令,但無法正確實現它。如何檢查IP地址是否可以在C中用於linux
回答
請注意,IP網絡上的「可達性」是一種棘手的測試。
服務器機器運行任意數量的實際服務(www,ftp,無論)都是完全可能的,但已被配置爲自some people do that以來不回覆ping。
如果可能的話,最好像連接你想要檢查的實際服務那樣連接。
+1真正的選擇 - 只要嘗試連接任何HTTP/IRC/FTP/POP/SMTP無論服務器。 – 2012-02-29 13:14:08
那麼你會希望用popen()
構建平安和程序之間的管道(參見例如:http://pubs.opengroup.org/onlinepubs/009695399/functions/popen.html)
然後,你需要適當地解析輸入。
正如其他人所建議的那樣,您可以使用popen()
。
但請記住,ping
是不可靠的,防火牆可以阻止ICMP回聲(由ping使用),但主機仍然可以在特定端口上訪問。
看看下面的例子程序:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
int main()
{
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(65432); // Could be anything
inet_pton(AF_INET, "192.168.0.1", &sin.sin_addr);
if (connect(sockfd, (struct sockaddr *) &sin, sizeof(sin)) == -1)
{
printf("Error connecting 192.168.0.1: %d (%s)\n", errno, strerror(errno));
}
sin.sin_family = AF_INET;
sin.sin_port = htons(65432); // Could be anything
inet_pton(AF_INET, "192.168.0.9", &sin.sin_addr);
if (connect(sockfd, (struct sockaddr *) &sin, sizeof(sin)) == -1)
{
printf("Error connecting 192.168.0.9: %d (%s)\n", errno, strerror(errno));
}
}
在我的系統它打印:
Error connecting 192.168.0.1: 111 (Connection refused)
Error connecting 192.168.0.9: 113 (No route to host)
在我的網絡192.168.0.1
是我自己的電腦,192.168.0.9
是不是在網絡上的地址。
正如你所看到的,根據是否可以到達地址(輸出的第一行)或不是(第二行),你會得到兩個不同的錯誤。
您的IPv6支持在哪裏? :( – 2012-02-29 12:44:16
@LightnessRacesinOrbit不幸的是,我目前無法訪問支持IPv6的計算機,所以無法真正測試它,但結果應該是相同的,不是嗎? – 2012-02-29 14:35:08
不是真的,區別在於你的工作不可行與IPv6。 – 2012-02-29 15:50:42
- 1. 如何檢查給定的IP地址是否在C程序中可達
- 2. 如何檢查IP地址是否可達?
- 3. Python3檢查IP地址是否全球
- 4. 如何檢查IP地址是否在特定的子網內
- 5. 檢查IP地址
- 6. 如何檢查IP地址是否有效?與php
- 7. 我可以檢查地址是否在共享內存中?
- 8. 檢查IP地址是否在網絡中
- 9. 檢查網絡IF是否可以在C Linux中訪問Internet?
- 10. 檢測Linux中IP地址的變化
- 11. 是否有任何可用於Ping IP地址的PHP腳本
- 12. Golang - 檢查是否IP地址是網絡中
- 13. 如何有效地檢查給定的IP地址是否屬於Python中的IP子網?
- 14. 是否可以在GPRS連接上使用私有IP地址
- 15. 是否可以在php error_log中記錄IP地址?
- 16. 檢查地址網址以檢查它是否有端點
- 17. 是否可以查看chrome歷史記錄的IP地址而不是網址?
- 18. 是否可以在不使用GeoIP的情況下檢查IP地址是否來自特定國家?
- 19. 如何檢查地址是否是商業或住宅地址
- 20. 如何檢查地址是否是回送地址nodejs
- 21. 檢查IP地址是否映射到本地主機
- 22. 檢查IP地址列表是否在R的CIDR註釋IP塊列表中
- 23. 檢查是否可以從linux內核空間訪問內存地址
- 24. BASH IP地址檢查
- 25. 查找IP地址是否在地址範圍內
- 26. 如何在Linux中以編程方式檢測IP地址更改?
- 27. 如何在C++中更改IP地址?
- 28. 是否可以通過IP地址找到用戶的位置?
- 29. 是否可以使用Maskeditextender進行IP地址?
- 30. 是否可以引用EC2內部的EC2彈性IP地址?
打開終端並鍵入ping -help – 2012-02-29 12:07:38
「我無法正確實現它」不是錯誤描述,並且這不是http://gimme-teh-codez.com – 2012-02-29 12:43:37