VC获取外网IP

近日做一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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值