首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC得到公网IP,该怎么处理

2012-09-11 
VC得到公网IPC/C++ codeint ret URLDownloadToFile(NULL, Lhttp://www.ip138.com/ip2city.asp, szTemp

VC得到公网IP

C/C++ code
int ret = URLDownloadToFile(NULL, L"http://www.ip138.com/ip2city.asp", szTempFile, 0, NULL);


下载文件进行分析,但怪异的是:在没用浏览器登录这个网址获得IP时(具体是不是这个原因我也不知道,我只是试着在没用浏览器首先登录这个网址得出的结论),用程序下载下来的文件内容为:

<html><body><br><br><script>window.location="/ip2city.asp?jdfwkey=xhfpv2";</script><center><h3>如果您的页面没有自动跳转,请<a href="/ip2city.asp?jdfwkey=xhfpv2">点击这里</a></h3></center></body></html>

如果用浏览器打开这个网址得到IP地址一次后,以后下载下来的文件内容为:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title> 您的IP地址 </title>
</head>
<body style="margin:0px"><center>您的IP地址是:[116.24.168.135] </center></body></html>

这样才能得到公网IP,请问这是怎么一回事?再说程序以前用得好好的,今天临时出了这样的问题。

[解决办法]
给你个例子吧,测试过可行的:
*取得本机外网IP*
*返回值为IP字串
*/
CString General::GetIp()
{
CString ipStr="";
char szTempFile [MAX_PATH];
char szTempPath [MAX_PATH];
GetTempPath(MAX_PATH, szTempPath); 
UINT nResult=GetTempFileName (szTempPath, _T ("ip"),0,szTempFile);
int ret=URLDownloadToFile(NULL,"http://www.ip138.com/ip2city.asp",szTempFile,0,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);
//AfxMessageBox(szMyIp);
ipStr=szMyIp;
}
}
}

return ipStr;
}
[解决办法]
网站改版了,加了url重定向

(用过浏览器之后就可以访问,估计是因为存了cookie在你的电脑中)

http://www.ip138.com/ip2city.asp
=> 程序直接访问
http://www.ip138.com/ip2city.asp?jdfwkey=xhfpv2

如果 jdfwkey=xhfpv2 这部分是随机的,
那你的程序就需要2次URLDownloadToFile
1) http://www.ip138.com/ip2city.asp
2) 解析1)的结果,得到新链接,再down下来
[解决办法]
5楼正确!
[解决办法]
不错,学习了!
[解决办法]
考虑重定向

热点排行