国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.Net寫追捕方法

2024-07-10 12:55:52
字體:
供稿:網(wǎng)友
在寫程序之間,飛刀還是讓大家看看追捕是如何通過ip來判斷用戶的來源地的(恩恩,現(xiàn)在就要揭揭"追捕"的"老底"了,大家好好聽啦)。
如果讓您去編寫追捕軟件的話,我想您首先想到的就是去收集一張ip分配表,并將他們存入數(shù)據(jù)庫以便讀取。在追捕軟件中,確實(shí)存在一張ip分配表,但是這張表在哪兒呢?
呵呵,我們知道在追捕的下載包含兩個(gè)文件,其一為wry.exe,這是追捕的主程序,其二為wry.dll,注意啦這便是我們辛辛苦苦想找的ip分配表。但是哪種數(shù)據(jù)文件是以dll結(jié)尾呢?dll文件不是動(dòng)態(tài)鏈接庫嗎?
不用急,我們接著分析,在使用追捕的過程中發(fā)現(xiàn),程序生成的數(shù)據(jù)庫多為dbf數(shù)據(jù)庫,那么這個(gè)wry.dll是否也是foxpro的數(shù)據(jù)庫?
想到做到,馬上將wry.dll改為wry.dbf,然后用visual foxpro打開,如圖2,呵呵,果然是dbf數(shù)據(jù)庫。它主要包含四個(gè)字段startip(啟始ip),endip(結(jié)束ip),country(ip所在國家或省),local(用戶上網(wǎng)類型)。
^&^ 知道了這些,程序就不難寫出來了,一句話,查詢數(shù)據(jù)庫。
慢慢,在網(wǎng)絡(luò)上用mdf數(shù)據(jù)庫,是否有些......
不管三七二十一,將mdf轉(zhuǎn)換成sql server再說。
什么!?不會(huì)將mdf轉(zhuǎn)換sql server?!呵呵,這本雜志是給程序員看的,這些基礎(chǔ)的東東,還是先看看其它的書吧,如果再講這些東東,流浪大哥會(huì)罵我騙稿費(fèi)的:(

實(shí)現(xiàn)此功能時(shí),為了程序的可讀性,同樣使用一個(gè)函數(shù)來完成:

public string getipfrom(string sip)
{
......
}

在前面程序中得到的ip通常為202.101.96.54這種格式,而在ip分配表中的格式是202.101.096.054,所以最先需要完成的就是對(duì)ip各段中不足三位的部分補(bǔ)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();

nip便是我們的需要的ip格式。
緊接著,就是在數(shù)據(jù)庫中查找符合所取ip條件的ip段:

string startip = nip.substring(0,11);
string endip = nip.substring(12,3);
string dbstartip,dbendip;
double dblendip,dbldbstartip,dbldbendip;

//查詢數(shù)據(jù)庫
string strsel = "select * from wry where left(startip,11)='"+startip+"'";
sqlconnection myconn = new sqlconnection(strconn);
sqlcommand mycomm = new sqlcommand(strsel,myconn);
myconn.open();
sqldatareader dr;
mycomm.execute(out dr);
if(dr.read())
{
//能夠查到三段以后的ip
do
{
dbstartip = dr["startip"].tostring();
dbendip = dr["endip"].tostring();
dbstartip = dbstartip.substring(12,3);
dbendip = dbendip.substring(12,3);
dblendip = double.parse(endip);
dbldbstartip = double.parse(dbstartip);
dbldbendip = double.parse(dbendip);
strresult = dr["country"].tostring()+dr["local"].tostring();
if((dbldbstartipdblendip {
break;
}
}
while(dr.read());
}
else
{
//三段后不存在,查二段
startip = nip.substring(0,7);
endip = nip.substring(9,3);
strsel = "select * from wry where left(startip,7)='"+startip+"' order by startip desc";
sqlconnection cloneconn =(sqlconnection) myconn.clone();
sqlcommand ocomm = new sqlcommand(strsel,cloneconn);
cloneconn.open();
sqldatareader odr;
ocomm.execute(out odr);
if(odr.read())
{
dbstartip = odr["startip"].tostring();
dbstartip = dbstartip.substring(9,3);
dbldbstartip = double.parse(dbstartip);
dblendip = double.parse(endip);
do
{
strresult=odr["country"].tostring()+odr["local"].tostring();
if(dbldbstartip {
break;
}
}
while(odr.read());
}
odr.close();
cloneconn.close();
}
dr.close();
myconn.close();

在查詢數(shù)據(jù)庫時(shí),飛刀采用的方法是先查前三段匹配的記錄,如果沒有,再查找前二段匹配的記錄。
程序很簡單,相信大家能看懂,這里需要意一下的就是,程序中飛刀使用了datareader而沒有使用功能更強(qiáng)大的dataset,是因?yàn)榇顺绦蛑袃H需要讀取數(shù)據(jù),而不需要對(duì)數(shù)據(jù)庫進(jìn)行修改,刪除,所以這時(shí)使用datareader比使用dataset節(jié)約系統(tǒng)資源。



測試程序,在本地機(jī)上測試,如圖3。完了,我主機(jī)上的一點(diǎn)小秘密全讓大家知道了:(

因?yàn)閍sp.net與visual c#、vc等共用一個(gè).net對(duì)象庫,也就是說,只要邏輯上存在可能,那么vc能做到的事情,asp.net同樣也能做到。也就是說我們這個(gè)程序,只要稍加修改,便能做成一個(gè)真正的追捕軟件,有興趣的朋友可以自已動(dòng)手喔。

通過編寫這個(gè)程序,現(xiàn)在我想不會(huì)有人再說"asp.net與asp差不多了"吧。
  • 網(wǎng)站運(yùn)營seo文章大全
  • 提供全面的站長運(yùn)營經(jīng)驗(yàn)及seo技術(shù)!
  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 荔浦县| 中牟县| 乡宁县| 漯河市| 淳安县| 丹阳市| 沙雅县| 富阳市| 从江县| 敖汉旗| 扶绥县| 马鞍山市| 合山市| 台北市| 神池县| 乌海市| 留坝县| 军事| 历史| 寻甸| 仁化县| 山西省| 绥宁县| 榆树市| 宝兴县| 阿拉尔市| 常山县| 德钦县| 洛川县| 布尔津县| 慈溪市| 法库县| 广宁县| 岑巩县| 靖安县| 奉贤区| 潞西市| 樟树市| 灌阳县| 凭祥市| 宣汉县|