#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 CNetDlg::GetNetIp() { CString internetIp = _T(""); char chSource[4096] = {0}; CString strAddress; CInternetSession mySession(NULL,0); CHttpFile* myHttpFile=NULL; strAddress = _T("http://20140507.ip138.com/ic.asp");//ip138网页 TRY { myHttpFile = (CHttpFile*)mySession.OpenURL(strAddress);//读取网络地址 while(myHttpFile->Read(chSource, 4096)) { //循环读取下载来的网页文本 int begin = 0; // 眼下仅仅处理字符集为gb2312的情况 begin = CKMP<BYTE*>::Find((BYTE*)chSource, strlen(chSource), (BYTE*)_C("charset=gb2312"), 14); 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) { internetIp.Format(T_T(_$_STRING_FORMAT_1), e->m_dwError, e->m_dwContext); } CATCH_ALL(e) { TCHAR ch[MAX_PATH] = {0}; e->GetErrorMessage(ch, MAX_PATH); internetIp.Format(T_T(_$_STRING_FORMAT_1), -3, ch); } END_CATCH_ALL TRACE(internetIp); return internetIp; }
參考:
http://blog.csdn.net/cbk861110/article/details/7844729
网页地址
http://20140507.ip138.com/ic.asp
从
http://www.ip138.com
的网页源代码中查找到。
<tr><td align="center"><h3>www.ip138.com IP查询(搜索IP地址的地理位置)</h3></td></tr> <tr> <td height="30" align="center" valign="top"><iframe src="http://20140507.ip138.com/ic.asp" rel="nofollow" frameborder="0" scrolling="no" width="100%" height="100%"></iframe></td> </tr>
时间: 2024-10-06 01:10:59