在寫程序之間,飛刀還是讓大家看看追捕是如何通過IP來判斷用戶的來源地的(恩恩,現在就要揭揭"追捕"的"老底"了,大家好好聽啦)。
如果讓您去編寫追捕軟件的話,我想您首先想到的就是去收集一張IP分配表,並將他們存入數據庫以便讀取。在追捕軟件中,確實存在一張IP分配表,但是這張表在哪兒呢?
呵呵,我們知道在追捕的下載包含兩個文件,其一為wry.exe,這是追捕的主程序,其二為wry.dll,注意啦這便是我們辛辛苦苦想找的IP分配表。但是哪種數據文件是以dll結尾呢?dll文件不是動態鏈接庫嗎?
不用急,我們接著分析,在使用追捕的過程中發現,程序生成的數據庫多為DBF數據庫,那麼這個wry.dll是否也是FoxPro的數據庫?
想到做到,馬上將wry.dll改為wry.dbf,然後用Visual FoxPro打開,如圖2,呵呵,果然是DBF數據庫。它主要包含四個字段Startip(啟始IP),Endip(結束IP),Country(IP所在國家或省),Local(用戶上網類型)。
^&^ 知道了這些,程序就不難寫出來了,一句話,查詢數據庫。
慢慢,在網絡上用MDF數據庫,是否有些......
不管三七二十一,將MDF轉換成SQL Server再說。
什麼!?不會將MDF轉換SQL Server?!呵呵,這本雜志是給程序員看的,這些基礎的東東,還是先看看其它的書吧,如果再講這些東東,流浪大哥會罵我騙稿費的:(
實現此功能時,為了程序的可讀性,同樣使用一個函數來完成:
public string GetIPFrom(string sIP)
{
......
}
在前面程序中得到的IP通常為202.101.96.54這種格式,而在IP分配表中的格式是202.101.096.054,所以最先需要完成的就是對IP各段中不足三位的部分補0。
char[] de={'.'};
string[] aIP = sIP.Split(de);
string SingleIP;
StringBuilder nIPx = new StringBuilder();
int SIPLen;
string strResult = "查不出";
for(int i=0;i<4;i++)
{
SingleIP = aIP[i];
SIPLen = SingleIP.Length;
if(SIPLen<3)
{
for(int j=0;j<3-SIPLen;j++) SingleIP ="0"+SingleIP;
}
aIP[i] = SingleIP;
}
//重新組合成為新的IP
for(int i=0;i<aIP.Length;i++)
{
if(i!=aIP.Length-1)
{
nIPx.Append(aIP[i]+".");
}
else
{
nIPx.Append(aIP[i]);
}
}
string nIP = nIPx.ToString();