全球IP地址查询完整版全球IP地址查询完整版突然在某某网站看到IP地址查询,于是心血来潮做了一个。这是用asp查询全球IP地址的程式,由于类似的的用Asp查询IP的速度不是很理想,本人使用的也是宏志宏的IP地址数据库,只是对它进行了改进。本人在win98+pws+access2000上测试通过,效果比较理想。数据库的设计在一个软件中的比例,毫不夸张的说占60%,虽然这是一个小的程式,但也得到一定的体现。有任何错误或建议请一定要给我发E-mail:ljz811@163.com,我也不了解“追捕”等类似算法,欢迎交流,谢谢!好了废话少说,开始吧。1、转wry.dll为.mdb由于我们要优化数据库(适合我们用的),建议这样做:将文件改为wry.xls用Excel打开。在Access中新建表IP字段名类型长度说明------------------------------------------------------------------------------------------------------------id自动编号newid数字5startip前三个数字seconded数字5startip第二部分三个数字startip文本20起始IP段endip文本20止IP段country文本此段IP所在国家或省local文本此段IP所在地从Excel中copystartip/endip/country/local四个字段至Access,id会自动添加,对于newid和secondid当然我们不可能手工添加,可以这样实现。!--#includefile=dbpath.asp--%sqlcmd=select*fromip‘建议使用sqlcmd=select*fromipwhereid=值1andid值2,因为对于一万个左右的数据一下子添加资源占用很大setrs=ip.execute(sqlcmd)dowhilenotrs.eoffir=left(rs(startip),3)sec=mid(rs(startip),5,3)sqlcmd3=updateipsetnewid=´&str&´,secondid=´sec´ip.executesqlcmd3rs.movenextloop%这样就完成数据库的修改,对于dbpath.asp文件下面讲2、文件介绍本程序分dbpath.asp和search.asp以下是源程序及简要描述Dbpath.Asp代码如下:(本人命名数据库名字为ip.mdb)%@Language=VBScript%%setip=server.createobject(ADODB.CONNECTION)ip.Opendriver={MicrosoftAccessDriver(*.mdb)};dbq=&Server.MapPath(ip.mdb)%search.asp代码如下:!--#includefile=dbpath.asp--%´Writeby尥蹶子´Ifyoufindsomeerrororyouhavebetteridea´Pleasecontactme´MyEmail:ljz811@163.comOicq:30763914%%´建立一个提交的表单%BODYbgColor=azurePalign=centerIP查询BRBRBRFORMaction=index.aspmethod=postid=form1name=form1fontsize=2输入IP:/fontINPUTid=text1name=putipstyle=BACKGROUND-COLOR:lavender;HEIGHT:22px;WIDTH:182pxINPUTid=submit1name=sub1style=BACKGROUND-COLOR:lightblue;FONT-SIZE:12type=submitvalue=我查tabindex=0/FORM%userip=Request.ServerVariables(REMOTE_ADDR)listip=trim(request(putip))iflistip=orlistip=thenResponse.Writepalign=centerfontsize=2请输入IP地址!/font/pelse´---判断访问者的IP是否与输入的ip同cmp=strcomp(userip,listip,1)ifcmp=0then%palign=centerfontsize=2这就是你自己呀!/p%else´获得输入ip的第1段,并置3位num1=Instr(listip,.)´判断第一段是否正确ifmun1=1thenResponse.Writepalign=center&listip&br&fontsize=2非有效的IP地址,IP每段必须1~3位!/pelsefir=left(listip,num1-1)iflen(fir)=2thenfir=0&firendififlen(fir)=1thenfir=0&firfir=0&firendif´获得输入ip的第2段,并置3位num2=Instr(num1+1,listip,.)sec=mid(listip,num1+1,num2-(num1+1))iflen(sec)=2thensec=0&secendififlen(sec)=1thensec=0&secsec=0&secendif´获得输入ip的第3段,并置3位num3=Instr(num2+1,listip,.)thr=mid(listip,num2+1,num3-(num2+1))iflen(thr)=2thenthr=0&threndififlen(thr)=1thenthr=0&thrthr=0&threndif´获得输入ip的第4段,并置3位fou=right(listip,len(listip)-num3)iflen(fou)=2thenfou=0&fouendififlen(fou)=1thenfou=0&foufou=0&fouendif´判断是否为有效IPiflen(fir)=0orlen(fir)3orlen(sec)=0orlen(sec)3orlen(thr)=0orlen(thr)3orlen(fou)=0orlen(fou)3thenResponse.Writepalign=center&listip&br&fontsize=2非有效的IP地址,IP每段必须1~3位!/pelse´判断是否为保留地址if((fir=0)and(fir=2))or((fir=58)and(fir=60))or((fir=67)and(fir=126))thenResponse.Writepalign=center&listip&br&fontsize=2InternetIP保留地址!/pelse´判断是否为分配地址if(fir=219andfir=223)orfir=225thenResponse.Writepalign=center&listip&br&fontsize=2此IP地址尚未分配!/pelseiffir255orfir0orsec255orsec0orthr255orthr0orfou255orfou0thenResponse.Writepalign=center&listip&br&fontsize=2InternetIP地址输入值不正确!/pelse´查询IP地址数据库Setsql=Server.CreateObject(ADODB.Recordset)rs1=selectid,startip,endip,country,localfromipwhereid9904andnewid=&fir&andsecondid=&sec&sql.openrs1,ip,1,1´对于类似224.000.000.000~224.255.255.255的ip地址进行处理ifsql.RecordCount=1thensql.Closesqlcmd2=selectid,startip,endip,country,localfromipwhereid9904andnewid=&fir&andsecondid=&sec&orderbyiddescsetrs=ip.execute(sqlcmd2)elsesqlcmd2=selectid,startip,endip,country,localfromipwhereid9904andnewid=&fir&orderbyiddescsetrs=ip.execute(sqlcmd2)ifrs.eofthen%brbrfontsize=2Palign=center%=listip%br★未知IP数据★BR如果你知道请告诉我!OICQ:30763914谢谢!BR=尥蹶子=/font/P%elsedowhilenotrs.eof´*******处理countryorlocal为空的情况,使用了按id倒排(why?因为根据IP地址表可知,先列大地区的ip段,例如先列出欧洲的062.000.000.000~062.255.255.255,再列英国等IP段)´对后面三段IP进行处理,是否在IP表内if(sec=(mid(rs(startip),5,3))and(sec=mid(rs(endip),5,3)))and(thr=(mid(rs(startip),9,3))and(thr=mid(rs(endip),9,3)))and(fou=(mid(rs(startip),13,3))and(fou=mid(rs(endip),13,3)))then%centerfontsize=2%=listip%br%=rs(country)%%=rs(local)%/font/center%´若查到数据,马上跳出以免占用资源exitdoelseendififrs.eofthen´如果没有打出提示%brbrfontsize=2Palign=center%=listip%br★未知IP数据★BR如果你知道请告诉我!OICQ:30763914谢谢!BR=尥蹶子=/font/P%endifrs.movenextloopendifendif%%endifendif%%endif%%endif%%endif%%endif%%endif%/BODY/HTML