MFC C++获取本机外网IP地址

本文参考:http://blog.csdn.net/tiandyoin/article/details/37998297

主要思路通过访问http://www.ip138.com/可以获取到本机IP,通过查看网页源码其IP获取地址为:http://1111.ip138.com/ic.asp。因此可以通过访问http://1111.ip138.com/ic.asp获取网页源码解析出IP,当然也可以解析出IP所在的地址。

源码如下:

#include<afxinet.h>
//GB2312 转换成 Unicode
wchar_t* GB2312ToUnicode(const char* szGBString)
{
	UINT nCodePage = 936; //GB2312

	int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);

	wchar_t* pBuffer = new wchar_t[nLength+1];

	MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);

	pBuffer[nLength]=0;

	return pBuffer;
}

CString GetNetIp()
{
	CString internetIp = _T("");
	char chSource[4096] = {0};
	CString strAddress;
	CInternetSession mySession(NULL,0);
	CHttpFile* myHttpFile=NULL;

	strAddress = _T("http://1111.ip138.com/ic.asp");//ip138网页
	//strAddress = _T("http://www.apnic.net/");
	TRY 
	{
		myHttpFile = (CHttpFile*)mySession.OpenURL(strAddress);
		//while(myHttpFile->Read(chSource, 4096));
		while(myHttpFile->Read(chSource, 4096))
		{
			//循环读取下载来的网页文本
			int begin = 0;
			// 目前只处理字符集为gb2312的情况
			CString sSourece(chSource);
			begin = sSourece.Find(_T("["),0);
			if(begin != -1)
			{
				WCHAR* wchSource = GB2312ToUnicode(chSource);
				internetIp = wchSource;
				delete[] wchSource;
			}
			begin = internetIp.Find(_T("["),0);
			if(begin !=- 1)//如果找到"[", 则找"]"  中括号内的文本则是 你的外网ip
			{
				int end = internetIp.Find(_T("]"));
				internetIp = internetIp.Mid(begin+1,end-begin-1);//提取外网ip
				break;
			}
		}
		myHttpFile->Close();
		mySession.Close();
	}
	CATCH(CInternetException,e)
	{
		
	}
	END_CATCH

	TRACE(internetIp);

	return internetIp;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值