轻松编写IP地址所属区域查询工具
文/图 Hello狗哥
如果你写了一个程序只有 1M,但在你发布时却要附带一个5M大小的玩意,你会不会感到很委屈?事实上就是这样。比如你下载了一个PCSHARE,有5M大小,可真正的PCSHARE只有1M不到,附带的WAYQQ.DAT却有4M。本文就将教给一个方法,让你把这些附带的玩意扔到一边,只用几句代码就实现相同的结果。
实现原理
我们访问“http://www.baidu.com/s?wd=202.102.123.22&cl=3”这个网址就会返回IP对应的物理地址,因而我们的实现思路就是动态提交IP地址到这个网址,再取回结果。当然,这个工作可不能手工完成,因为这样太笨了。下面我们就写个程序来完成这个工作,程序是在Windlws XP+VC6下实现的,其界面如图1所示。图1
技术重点
虽然我们可以使用HTTP协议来实现,但这样会有点麻烦,所以本文使用了微软提供的CInternetSession和CHttpFile类来实现,通过CInternetSession的构造函数构建一个连接会话,然后通过CInternetSession类的OpenURL方法来取得CHttpFile的对像,最后通过ReadString读取返回信息并提取出需要的信息即可。
具体实现
首先新建一个对话框程序,并使用“#include<afxinet.h>”头文件;然后加入如图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中得到的就是我们需要的地址了,是不是很简单?呵呵,要知道,简单的就是美丽的
补充:综合编程 , 安全编程 ,