|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
忽然在某某网站看到IP地址查询,于是心血来潮做了一个。这是用asp查询全球IP地址的程式,由于类似的的用Asp查询IP的速度不是很理想,本人使用的也是宏志宏的IP地址数据库,只是对它进行了改进。 本人在 win98+pws+access2000上测试通过,效果比较理想。 数据库的设计在一个软件中的比例,毫不夸张的说占60%,虽然这是一个小的程式,但也得到一定的体现。 好了废话少说,开始吧。 1、 转wry.dll为.mdb由于我们要优化数据库(适合我们用的),建议这样做: 将文件改为wry.xls用Excel打开。 在Access中新建表IP 字段名 类型 长度 --------------------------------------------------------------------------- id 自动编号 newid 数字 5 startip前三个数字 seconded 数字 5 startip第二部分三个数字 startip 文本 20 起始IP段 endip 文本 20 止 IP 段 country 文本 此段IP所在国家或省 local 文本 此段IP所在地 从Excel中copy startip/endip/country/local 四个字段至Access ,id会自动添加,对于newid和secondid当然我们不可能手工添加,可以这样实现。 <!--#include file="dbpath.asp"--> <% sqlcmd="select * from ip" ‘建议使用sqlcmd="select * from ipwhere id>=值1 and id<值2" ,因为对于一万个左右的数据一下子添加资源占用很大 set rs=ip.execute(sqlcmd) do while not rs.eof fir=left(rs("startip"),3) sec=mid(rs("startip"),5,3) sqlcmd3="update ip set newid=\\\'"&str&"\\\',secondid=\\\'"sec"\\\' " ip.execute sqlcmd3 rs.movenext loop %> 这样就完成数据库的修改,对于dbpath.asp 文件下面讲 2、 文件介绍 本程序分 dbpath.asp 和 search.asp 以下是源程序及简要描述 Dbpath.Asp 代码如下:(本人命名数据库名字为ip.mdb) <%@ Language=VBScript %> <% set ip=server.createobject("ADODB.CONNECTION") ip.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("ip.mdb") %> search.asp 代码如下: <!--#include file="dbpath.asp"--> <% \\\' Write by 尥蹶子 \\\' If you find some error or you have better idea \\\' Please contact me \\\' My Email: ljz811@163.com Oicq:30763914 %> <% \\\'建立一个提交的表单 %> <BODY bgColor=azure> <P align=center>IP查询<BR><BR><BR> <FORM action="index.asp" method=post id=form1 name=form1> <font size=2>输入IP:</font><INPUT id=text1 name=putip style ="BACKGROUND-COLOR: lavender; HEIGHT: 22px; WIDTH: 182px" > <INPUT id=submit1 name=sub1 style="BACKGROUND-COLOR: lightblue; FONT-SIZE: 12" type=submit value="我查" tabindex="0"> </FORM> <% userip=Request.ServerVariables ("REMOTE_ADDR") listip=trim(request("putip")) if listip="" or listip=" " then Response.Write "<p align=center><font size=2>请输入IP地址!</font></p>" else \\\'---判定访问者的IP是否与输入的ip同 cmp=strcomp(userip,listip,1) if cmp=0 then %> <p align=center><font size=2 >这就是你自己呀!</p> <% else \\\'获得输入ip的第1段,并置3位 num1=Instr(listip,".") \\\'判定第一段是否准确 if mun1=1 then Response.Write "<p align=center>"&listip&"<br>"&" <font size=2 >非有效的IP地址,IP每段必须1~3位!</p>" else fir=left(listip,num1-1) if len(fir)=2 then fir=0&fir end if if len(fir)=1 then fir=0&fir fir=0&fir end if \\\'获得输入ip的第2段,并置3位 num2=Instr(num1+1,listip,".") sec=mid(listip,num1+1,num2-(num1+1)) if len(sec)=2 then sec=0&sec end if if len(sec)=1 then sec=0&sec sec=0&sec end if \\\'获得输入ip的第3段,并置3位 num3=Instr(num2+1,listip,".") thr=mid(listip,num2+1,num3-(num2+1)) if len(thr)=2 then thr=0&thr end if if len(thr)=1 then thr=0&thr thr=0&thr end if \\\'获得输入ip的第4段,并置3位 fou=right(listip,len(listip)-num3) if len(fou)=2 then fou=0&fou end if if len(fou)=1 then fou=0&fou fou=0&fou end if \\\'判定是否为有效IP if len(fir)=0 or len(fir)>3 or len(sec)=0 or len(sec)>3 or len(thr)=0 or len(thr)>3 or len(fou)=0 or len(fou)>3 then Response.Write "<p align=center>"&listip&"<br>"&" <font size=2 >非有效的IP地址,IP每段必须1~3位!</p>" else \\\'判定是否为保留地址 if ((fir>=0) and (fir<= 2)) or ((fir>=58) and (fir<=60)) or ((fir>=67) and (fir<=126)) then Response.Write "<p align=center>"&listip&"<br>"&" <font size=2 >Internet IP保留地址!</p>" else \\\'判定是否为分配地址 if (fir>=219 and fir<=223) or fir=225 then Response.Write "<p align=center>"&listip&"<br>"&" <font size=2 >此IP地址尚未分配!</p>" else if fir>255 or fir<0 or sec>255 or sec<0 or thr>255 or thr<0 or fou>255 or fou<0 then Response.Write "<p align=center>"&listip&"<br>"&" <font size=2 >Internet IP地址输入值不准确!</p>" else \\\'查询IP地址数据库 Set sql= Server.CreateObject("ADODB.Recordset") rs1="select id,startip,endip,country,local from ip where id<9904 and newid="&fir&" and secondid="&sec&" " sql.open rs1,ip,1,1 \\\'对于类似224.000.000.000~224.255.255.255的ip地址进行处理 if sql.RecordCount = 1 then sql.Close sqlcmd2="select id,startip,endip,country,local from ip where id<9904 and newid="&fir&" and secondid="&sec&" order by id desc" set rs=ip.execute(sqlcmd2) else sqlcmd2="select id,startip,endip,country,local from ip where id<9904 and newid="&fir&" order by id desc" set rs=ip.execute(sqlcmd2) if rs.eof then %> <br><br><font size="2"><P align=center><%=listip%><br>★未知IP数据★<BR>假如你知道请告诉我!OICQ:30763914 谢谢!<BR>=尥蹶子=</font></P> <% else do while not rs.eof \\\'*******处理country or local为空的情况,使用了按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 %> <center><font size=2><%=listip%><br><%=rs("country")%> <%=rs("local")%></font></center> <% \\\'若查到数据,立刻跳出以免占用资源 exit do else end if if rs.eof then \\\'假如没有打出提示 %> <br><br><font size="2"><P align=center><%=listip%><br>★未知IP数据★<BR>假如你知道请告诉我!OICQ:30763914 谢谢!<BR>=尥蹶子=</font></P> <% end if rs.movenext loop end if end if %> <% end if end if%> <%end if%> <%end if%> <%end if%> <%end if%><%end if%> </BODY> </HTML> 返回类别: 教程 上一教程: ACCESS数据库的存储上限 下一教程: 聊天室建设详解五 您可以阅读与"全球IP地址查询完整版"相关的教程: · 纯ASP(VBSCRIPT)写的全球IP地址搜 · 纯ASP(VBSCRIPT)写的全球IP地址搜索程序 · 限制某段IP地址 · 用VBSCRIPT判定EMAIL地址的合法性 · 通过网络域名得到这台主机的IP地址 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |