WEB开发网
开发学院WEB开发ASP 全球IP地址查询完整版 阅读

全球IP地址查询完整版

 2001-10-04 11:04:43 来源:WEB开发网   
核心提示:突然在某某网站看到ip地址查询,于是心血来潮做了一个,全球IP地址查询完整版,这是用asp查询全球IP地址的程式,由于类似的的用Asp查询IP的速度不是很理想,例如先列出欧洲的062.000.000.000~062.255.255.255,再列英国等IP段) '对后面三段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         数字        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>


Tags:全球 IP 地址查询

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接