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

VC++编写IP所属区域查询工具

2012-02-21 15:24 239 查看
实现原理

我们访问“http://www.baidu.com/s?wd=202.102.123.22&cl=3”这个网址就会返回IP对应的物理地址,因而我们的实现思路就是动态提交IP地址到这个网址,再取回结果。当然,这个工作可不能手工完成,因为这样太笨了

技术重点

虽然我们可以使用HTTP协议来实现,但这样会有点麻烦,所以本文使用了微软提供的 CInternetSession和CHttpFile类来实现,通过CInternetSession的构造函数构建一个连接会话,然后通过 CInternetSession类的OpenURL方法来取得CHttpFile的对像,最后通过ReadString读取返回信息并提取出需要的信息即可。

具体实现

首先新建一个对话框程序,并使用“#include”头文件;然后加入如图1所示的相应控件,之后再为解析按钮加入如下的代码即可。

void ::OnOK()
{
CString m_ReturnStr="";//要返回的物理地址
CString m_ip=""; //需要解析的IP地址
CString straddress("http://www.baidu.com/s?wd=");
//构造访问的地址
GetDlgItem(IDC_EDIT1)->GetWindowText(m_ip);
straddress+=m_ip;
straddress+="&cl=3";
CInternetSession mySession(NULL,0);
//构造一个新的会话
CHttpFile* myHttpFile=NULL;
CString strline;
myHttpFile=(CHttpFile*)mySession.OpenURL(straddress);//打开网址
if(myHttpFile==NULL)
{
MessageBox("OpenURL ERROR!");
return;
}
while(myHttpFile->ReadString(strline))//读取返回的内容
{
m_ReturnStr+=strline;
}
m_ReturnStr.Delete(0,m_ReturnStr.Find("来自")+6);
CString str=m_ReturnStr.Left(m_ReturnStr.Find(" "));
myHttpFile->Close ;
mySession.Close ;
}


经过上面的代码处理后,最后的str中得到的就是我们需要的地址了,是不是很简单?呵呵,要知道,简单的就是美丽的

[学习下攻取网页源码的方法吧,这个在我试验的时候已经不能用了,具体的看下面我提供的方式,异曲同工]

百度的IP数据库也是从IP138上来的

进入 IP138 鼠标到查询上可以看见他的链接网页是ips.asp

查询格式为“http://www.ip138.com/ips8.asp?ip=120.14.248.125”

可以把这个网页的代码获取来然后进行拆分获取,代码是GB格式的,不用转码直接使用即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: