您的位置:首页 > 编程语言 > C语言/C++

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

2014-11-17 17:30 375 查看
本文参考:/article/1800256.html

主要思路通过访问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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: