CString str("");
char szHostName[128];
if (gethostname(szHostName, 128) == 0)
{
struct hostent *pHost = gethostbyname(szHostName);
for (int i = 0; pHost != NULL && pHost->h_addr_list[i] != NULL; i++)
{
str = inet_ntoa(*(struct in_addr *)pHost->h_addr_list[i]);
if (str.Left(7) != "192.168" && str.Left(4) != "127."
&& str.Left(4) != "244." && str.Left(7) != "169.254"
&& str.Left(3) != "10." && str.Left(3) != "172.")
{
break;
}
}
}
MessageBox(str);
算法思路很奇特,把所有内网IP和特殊IP排除掉剩下的获得的就是公网IP了,目前看来效果还可以。