您的位置:首页网页设计ASP实例 → 全球IP地址查询完整版

全球IP地址查询完整版

时间:2004/11/7 2:57:00来源:本站整理作者:蓝点我要评论(0)

    突然在某某网站看到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                 数字                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当然我们不可能手工添加,可以这样实现。



  







<%



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  代码如下:







<%



'           Write  by  尥蹶子



'                   If you find some error or you have better idea



'           Please contact  me



'           My Email: ljz811@163.com    Oicq:30763914



%>



<%



'建立一个提交的表单



%>







IP查询














输入IP:


style    ="BACKGROUND-COLOR: lavender; HEIGHT: 22px; WIDTH: 182px" >&nbsp;















<%



userip=Request.ServerVariables ("REMOTE_ADDR")



listip=trim(request("putip"))



  if listip="" or listip=" " then



  Response.Write "

请输入IP地址!

"



  else







'---判断访问者的IP是否与输入的ip同



   cmp=strcomp(userip,listip,1)



   if cmp=0 then  %>



  

这就是你自己呀!





  <%



   



  else  



  '获得输入ip的第1段,并置3位



  num1=Instr(listip,".")



  



   '判断第一段是否正确



   if mun1=1 then



     Response.Write  "

"&listip&"
"&" 非有效的IP地址,IP每段必须1~3位!

"



   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  "

"&listip&"
"&" 非有效的IP地址,IP每段必须1~3位!

"



  



  else



  



    '判断是否为保留地址



     if ((fir>=0) and  (fir<= 2)) or ((fir>=58) and (fir<=60)) or ((fir>=67) and (fir<=126)) then



     Response.Write  "

"&listip&"
"&" Internet IP保留地址!

"



      



     else



     



        '判断是否为分配地址



        if (fir>=219 and fir<=223) or fir=225 then



        Response.Write  "

"&listip&"
"&" 此IP地址尚未分配!

"



        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  "

"&listip&"
"&" Internet IP地址输入值不正确!

"



       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



          %>



        

<%=listip%>
★未知IP数据★
如果你知道请告诉我!OICQ:30763914 谢谢!
=尥蹶子=





         <% 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



             %>  



           
<%=listip%>
<%=rs("country")%>&nbsp;&nbsp;<%=rs("local")%>




           <%



               '若查到数据,马上跳出以免占用资源



                          exit do



               else



            



              end if



              if rs.eof then



              '如果没有打出提示



              %>



              

<%=listip%>
★未知IP数据★
如果你知道请告诉我!OICQ:30763914 谢谢!
=尥蹶子=





            <%



             end if



              rs.movenext



          loop



          



          end if



         end if



          %>



            



      



     <%



      end if



end if%>



     <%end if%>



     <%end if%>



     <%end if%>



     <%end if%><%end if%>














相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 迅雷新手完全入门手册 asp下面javascript上传图片限制格式大小方法告诉大家网页弹出窗口应用总结ASP常见错误类型大全asp常见错误分析和解决办法

人气排行 总是弹出visual studio 实时调试器 三种解决SQLSERVER存储过程及调用详解Asp获取真实IP地址ASP中连接Mssql的几种方法一个简单好用的UBB编辑器(含代码)如何用Split将字符串转换为数组并获取数组下ASP防止表单重复提交的办法告诉你免费的简单聊天室源代码