VC++編寫IP所屬區域查詢工具

實現原理
我們訪問“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格式的,不用轉碼直接使用即可
發佈了24 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章