我怎样才能得到系统的IP地址

我怎样才能得到系统的IP地址。

我想要IP地址,我可以看到做ipconfig/bin/ifconfig

Solutions Collecting From Web of "我怎样才能得到系统的IP地址"

你的意思是“IP地址” – 在Win32中使用GetAdapterAddresses 。 那里有示例代码。

这有点令人费解,因为您首先调用API必须查看您需要多少内存,然后再次调用具有所需内存块的同一个API。 然后,您必须按照示例中所示,遍历该内存块中返回的结构列表。 你最终得到的是这样的:

SOCKET_ADDRESS结构用于AdapterAddresses参数指向的IP_ADAPTER_ADDRESSES结构中。 在为Windows Vista及更高版本发布的Microsoft Windows软件开发工具包(SDK)中,头文件的组织已更改,并且Winsock2.h头文件中自动包含的Ws2def.h头文件中定义了SOCKET_ADDRESS结构。 在为Windows server 2003和Windows XP发布的Platform SDK上,在Winsock2.h头文件中声明了SOCKET_ADDRESS结构。 为了使用IP_ADAPTER_ADDRESSES结构,必须在Iphlpapi.h头文件之前包含Winsock2.h头文件。

此时,您可以调用WSAAddressToString来将SOCKET_ADDRESS结构中保存的IP地址字符串化,无论是IPv6还是IPv4。

你的问题不是很具体,但这应该有所帮助:

http://www.codeguru.com/forum/showthread.php?t=233261

如果您可以访问.NET Framework(托管C ++),则可以使用System.Net.Dns.GetHostAddress方法。 在这里看到更多: http : //msdn.microsoft.com/en-us/library/system.net.dns.gethostaddresses.aspx你实际上得到一个IP数组,因为一个域名可以对应多个IP。

对于本地IP地址,您可以使用winsock。 看看这个例子 。

如果您使用winsock,请确保在项目中添加适当的库。 例如,我必须在VS 2008中添加Ws2_32.lib

如果你在防火墙的后面,想要知道你的公共IP地址,你可以使用一个HTTP客户端库来抓取这样的网页(有一个只是以文本/普通的形式返回IP地址,但是我找不到它现在)。

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