ASP.Net写追捕方法


所属类别:.NET

文章作者:未知

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


在写程序之间,飞刀还是让大家看看追捕是如何通过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;}//重新组合成为新的IPfor(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格式。紧接着,就是在数据库中查找符合所取IP条件的IP段:string StartIP = nIP.Substring(0,11);string EndIP = nIP.Substring(12,3);string dbStartIP,dbEndIP;Double dblEndIP,dbldbStartIP,dbldbEndIP;//查询数据库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()){//能够查到三段以后的IPdo{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();在查询数据库时,飞刀采用的方法是先查前三段匹配的记录,如果没有,再查找前二段匹配的记录。程序很简单,相信大家能看懂,这里需要意一下的就是,程序中飞刀使用了DataReader而没有使用功能更强大的DataSet,是因为此程序中仅需要读取数据,而不需要对数据库进行修改,删除,所以这时使用DataReader比使用DataSet节约系统资源。综合上面的程序代码,一个WEB追捕做大功告成,本想将全部代码也贴出来,But这样似乎有骗稿费之嫌,所以还是请大家去我们的站点自行下载吧(http://www.aspcn.com/products/wry/wry.zip)。测试程序,在本地机上测试,如图3。完了,我主机上的一点小秘密全让大家知道了:(因为ASP.Net与Visual C#、VC等共用一个.Net对象库,也就是说,只要逻辑上存在可能,那么VC能做到的事情,ASP.Net同样也能做到。也就是说我们这个程序,只要稍加修改,便能做成一个真正的追捕软件,有兴趣的朋友可以自已动手喔。通过编写这个程序,现在我想不会有人再说"ASP.Net与ASP差不多了"吧。 关闭本页

相关信息

· Linux网络管理员手册(4)第四章设置串行硬件Modem连接的通信软件串行设备概述

· 新手学堂:Linux操作系统的进程状态介绍

· 动态类型与PropertyGrid

· MIDlets实现用户界面(GUI)编程








....

117901 19733