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了,目前看来效果还可以。
本文介绍了一种通过排除内网及特殊IP地址来获取公网IP的方法。该算法利用C/C++实现,通过gethostname和gethostbyname函数获取本地主机名及对应的IP地址列表,并筛选出不属于192.168、127、244、169.254、10和172等私有或保留IP段的地址。
1万+

被折叠的 条评论
为什么被折叠?



