回答
後看到你的意思是「IP地址」 - 在Win32中使用GetAdapterAddresses。那裏有示例代碼。
這有點令人費解,因爲您首先調用API必須查看您需要多少內存,然後再次調用具有所需內存塊的相同API。然後,您必須按照示例所示遍歷該內存塊中返回的結構列表。什麼你最終鑼去是這樣的:
的SOCKET_ADDRESS結構在IP_ADAPTER_ADDRESSES結構 由AdapterAddresses 參數指向使用 。在Microsoft Windows 軟件開發工具包(SDK) 發佈的Windows Vista和更高版本, 的頭文件組織 改變,SOCKET_ADDRESS 結構在Ws2def.h 頭文件自動爲 由包括定義Winsock2.h標頭 文件。在平臺SDK發佈的 Windows Server 2003和Windows XP, SOCKET_ADDRESS結構是 在Winsock2.h標頭 文件中聲明。爲了使用 IP_ADAPTER_ADDRESSES結構, Winsock2.h頭文件必須包含在Iphlpapi.h頭文件 之前的 。
在這一點上,你可以打電話給WSAAddressToString字符串IZE多數民衆贊成召開SOCKET_ADDRESS
結構內部的IP地址,不管是IPv6或IPv4。
你的問題不是很具體,但這應該幫助:
如果您在防火牆後面,想知道你的公網IP地址,你可以使用一個HTTP客戶端庫刮像this one這樣的網頁(有一個只是以文本/純文本的形式返回IP地址,但我現在找不到它)。
在C++中? (15個字符) – 2010-10-22 13:55:01
謝謝@The ...不正確閱讀標籤是我的一個壞習慣。 – 2010-10-22 13:56:00
[我知道你的意思](http://stackoverflow.com/questions/3962395/really-simple-programming-languages/3963880#3963880「不讀thouroghly」):) – Default 2010-10-22 14:00:07
如果您可以訪問.NET Framework(託管C++),則可以使用System.Net.Dns.GetHostAddress方法。請參閱此處瞭解更多信息:http://msdn.microsoft.com/en-us/library/system.net.dns.gethostaddresses.aspx 實際上,您可以獲得一組IP地址,因爲一個域名可以對應多個IP。
對於本地IP地址,您可以使用winsock。看看this example。
如果您使用winsock,請確保在項目中添加適當的庫。例如,我必須在VS 2008中添加Ws2_32.lib
。
// Requires that WSAStartup has been called
std::vector<std::string> GetIPAddresses(const std::string& hostname)
{
std::vector<std::string> result;
// We use getaddrinfo (gethostbyname has been deprecated)
struct addrinfo hints = {0};
hints.ai_family = AF_UNSPEC; // Want both IPv4 and IPv6
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
struct addrinfo *paddrinfo = NULL;
if (getaddrinfo(hostname.c_str(), NULL, &hints, &paddrinfo)!=0)
return result; // Something is wrong, empty list returned
// The machine can have multiple IP addresses (IPv4, IPv6, etc.)
for(struct addrinfo *ptr=paddrinfo; ptr != NULL ;ptr=ptr->ai_next)
{
// inet_ntop is not available for all versions of Windows, we implement our own
char ipaddress[NI_MAXHOST] = {0};
if (ptr->ai_family == AF_INET)
{
if (getnameinfo(ptr->ai_addr, sizeof(struct sockaddr_in), ipaddress, _countof(ipaddress)-1, NULL, 0, NI_NUMERICHOST)==0)
result.push_back(std::string(ipaddress));
}
else if (ptr->ai_family == AF_INET6)
{
if (getnameinfo(ptr->ai_addr, sizeof(struct sockaddr_in6), ipaddress, _countof(ipaddress)-1, NULL, 0, NI_NUMERICHOST)==0)
result.push_back(std::string(ipaddress));
}
}
freeaddrinfo(paddrinfo);
return result;
}
- 1. 如何獲取使用Android手機的系統的IP地址?
- 2. 如何獲取遠程系統的IP地址?
- 3. 如何獲取我係統的IP地址
- 4. 如何在Ruby中獲取系統的IP地址(和)相關的MAC地址?
- 5. 如何獲取IP地址?
- 6. 如何獲取IP地址?
- 7. 使用c獲取本地系統ip地址#
- 8. 如何獲得客戶端系統的IP地址,Serverlet要求
- 9. Java:Socket編程 - 使用InetAddress獲取我的系統IP地址
- 10. 獲取wifi連接系統的IP地址
- 11. 獲取IP地址
- 12. 獲取IP地址
- 13. 獲取IP地址
- 14. 在仿真器中獲取系統IP地址
- 15. 如何獲取node.js中的IP地址
- 16. 如何獲取後端的IP地址?
- 17. 獲取Java中的系統MAC地址
- 18. 登錄系統的IP地址
- 19. 不顯示系統的IP地址
- 20. 獲取IP地址的mac地址
- 21. 獲取本地IP地址
- 22. 如何使用Java獲取系統IP?
- 23. 如何使用Java獲取系統IP?
- 24. 獲取我的IP地址
- 25. 獲取ip地址的值
- 26. 如何使用C++ Win32 API獲取當前系統域IP地址?
- 27. 如何獲得我的本地主機系統的公共IP地址
- 28. 如何在PageMethod中獲取IP地址?
- 29. 如何使用R獲取IP地址?
- 30. 如何僅獲取IP地址/子網
什麼IP地址 - 內部網絡或計算機通過互聯網連接的?如果內置多個網卡會怎麼樣? – 2010-10-22 13:53:54
更重要的是,IPv4還是IPv6? – MSalters 2010-10-22 14:03:37
很多時候,當有人說「我想**系統的** IP地址」時,他的整個設計都是錯誤的。您**必須**假設系統可以有0到N個IP地址。其他一切都是錯誤的。 – ereOn 2010-10-22 14:59:50