VC获取外网IP

来源:互联网 发布:java和javaweb的区别 编辑:程序博客网 时间:2024/06/05 17:29

近日做一VC客户端,需要获取本机的外网IP地址,查询了相关资料,因为使用的宽带上网方式,本机的外网IP其实不在本机,故没有办法直接获取到,所以是用Get方法从其他网站获取,实际用的是从新浪和ip138两个获取,来个双备份。

从新浪获取:

BOOL GetIPAddressFromSinaAPI()     {    CString strTemp;    m_strIPServerSina = "http://ipapi.sinaapp.com/api.php?f=text";    strTemp = doGet(m_strIPServerSina);     CString strIPInfo = ConvertUTF8toGB2312(strTemp,strTemp.GetLength());    int i = 0;    const char* iIndex = strstr(strIPInfo,"IP地址:");     if( iIndex != NULL )    {        char temp[128];        sprintf_s(temp,"%s",iIndex);        char ip[128] = {'\0'};        unsigned int i = 0;        for(i = strlen("IP地址:"); i< strlen(temp); i++)             {                 ip[i- strlen("IP地址:")] = temp[i];                             if( (temp[i] < 46) || (temp[i] > 57) )            {                     ip[i- strlen("IP地址:")] = '\0';                m_strIP = ip;                break;            }        }    }    else    {return FALSE;    }    iIndex = strstr(strIPInfo,"归属地信息:");    if( iIndex == 0x0000 )    {m_strCity = "unknown";    }    else    {m_strCity = iIndex+strlen("归属地信息:");    }    return TRUE;}


从ip138获取:

BOOL GetIPAddressFromIP138(){CString strTemp;m_strIPServerIP138= "http://iframe.ip138.com/ic.asp";strTemp = doGet(m_strIPServerIP138);int i = 0;char* ipStart = (char*)strstr(strTemp,"您的IP是:["); if( NULL == ipStart ) return FALSE;char* ipEnd = (char*)strstr(ipStart,"]"); if( NULL == ipEnd )   return FALSE;char* cityStart  = ipEnd+1;if( NULL == cityStart)return FALSE;*ipEnd = '\0';m_strIP = ipStart+strlen("您的IP是:[");char* cityRealStart = strstr(cityStart,"来自:");if( NULL == cityRealStart ) return FALSE;char* cityEnd = strstr(cityRealStart,"<");if( NULL== cityEnd ) return FALSE;*cityEnd = '\0';m_strCity = cityRealStart + strlen("来自:");return TRUE;}

说明一下,两个函数里面所使用的doGet,是Get方式与服务器通信,网上可以寻找到一个封装VC进行POST/GET通信的类CHttpClient,这个doGet即是里面的一个成员函数。

如果返回TRUE,那么m_strIP就是IP的字符串,比如“111.112.120.222”,m_strCity则是归属地字符串,比如“天津市 电信”。

0 0
原创粉丝点击