VC++獲取外網IP的幾個方法
一、CHttpFile方式
#include <afxinet.h>
int GetNetIp(char *IpAddr)
{
try
{
CInternetSession session("HttpClient");
char * url = "http://bot.whatismyipaddress.com/";
CHttpFile* pfile = (CHttpFile *)session.OpenURL(url);
DWORD dwStatusCode;
pfile -> QueryInfoStatusCode(dwStatusCode);
if(dwStatusCode == HTTP_STATUS_OK)
{
CString content;
CString data;
while (pfile->ReadString(data))
{
content += data + "\r\n";
}
content.TrimRight();
strcpy(IpAddr, content);
}
pfile -> Close();
delete pfile;
session.Close();
return 0;
}
catch(...)
{
return -1;
}
}
二、URLDownloadToFile方式
int GetIp(char *IpAddr)
{
int GetIp(char *IpAddr)
{
try
{
char szTempFile [MAX_PATH];
char szTempPath [MAX_PATH];
GetTempPath(MAX_PATH, szTempPath);
UINT nResult=GetTempFileName (szTempPath, _T ("ip"),0,szTempFile);
int ret=URLDownloadToFile(NULL,"
if (ret==S_OK) //如果下載成功
{
FILE *f;
f=fopen(szTempFile,"rb");
if(f)
{
fseek(f,0,SEEK_END);//得到檔案大小
int ilength=ftell(f);
fseek(f,0,SEEK_SET);
if(ilength>0)
{
char szMyIp[16] = {0};
char fBuffer[256] = {0};
fread(fBuffer, 256, 1, f);
int iBegin,iEnd;
for (int i = 0; i < ilength; i++)
{
//取得"["的位置
if (fBuffer[i] == 0x5b)
iBegin = i;
//取得"]"的位置
if (fBuffer[i] == 0x5d)
{
iEnd = i;
break;
}
}
memcpy(szMyIp, fBuffer + iBegin + 1, iEnd - iBegin - 1);
strcpy(IpAddr, szMyIp);
return 0;
}
}
}
return 1;
}
catch(...)
{
return -1;
}
}
}