明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

全球IP地址查詢(xún)完整版

[摘要]突然在某某網(wǎng)站看到IP地址查詢(xún),于是心血來(lái)潮做了一個(gè)。這是用asp查詢(xún)?nèi)騃P地址的程式,由于類(lèi)似的的用Asp查詢(xún)IP的速度不是很理想,本人使用的也是宏志宏的IP地址數(shù)據(jù)庫(kù),只是對(duì)它進(jìn)行了改進(jìn)。本人在 win98+pws+access2000上測(cè)試通過(guò),效果比較理想。數(shù)據(jù)庫(kù)的設(shè)計(jì)在一個(gè)軟件中的比例...
    突然在某某網(wǎng)站看到IP地址查詢(xún),于是心血來(lái)潮做了一個(gè)。這是用asp查詢(xún)?nèi)騃P地址的程式,由于類(lèi)似的的用Asp查詢(xún)IP的速度不是很理想,本人使用的也是宏志宏的IP地址數(shù)據(jù)庫(kù),只是對(duì)它進(jìn)行了改進(jìn)。

本人在 win98+pws+access2000上測(cè)試通過(guò),效果比較理想。

數(shù)據(jù)庫(kù)的設(shè)計(jì)在一個(gè)軟件中的比例,毫不夸張的說(shuō)占60%,雖然這是一個(gè)小的程式,但也得到一定的體現(xiàn)。

有任何錯(cuò)誤或建議請(qǐng)一定要給我發(fā)E-mail: ljz811@163.com  ,我也不了解“追捕”等類(lèi)似算法,歡迎交流,謝謝!

好了廢話(huà)少說(shuō),開(kāi)始吧。

1、  轉(zhuǎn)wry.dll為.mdb由于我們要優(yōu)化數(shù)據(jù)庫(kù)(適合我們用的),建議這樣做:

將文件改為wry.xls用Excel打開(kāi)。

在Access中新建表IP

字段名                 類(lèi)型               長(zhǎng)度                   說(shuō)明

------------------------------------------------------------------------------------------------------------

     id                  自動(dòng)編號(hào)   

newid                 數(shù)字                5                      startip前三個(gè)數(shù)字

    seconded                數(shù)字                5                    startip第二部分三個(gè)數(shù)字

    startip                  文本               20                    起始IP段

    endip                  文本                20                    止 IP 段

    country                 文本                                     此段IP所在國(guó)家或省

    local                   文本                                      此段IP所在地

                               

從Excel中copy     startip/endip/country/local 四個(gè)字段至Access ,id會(huì)自動(dòng)添加,對(duì)于newid和secondid當(dāng)然我們不可能手工添加,可以這樣實(shí)現(xiàn)。

  <!--#include file="dbpath.asp"-->



<%

sqlcmd="select * from ip"

‘建議使用sqlcmd="select * from ipwhere id>=值1 and id<值2"  ,因?yàn)閷?duì)于一萬(wàn)個(gè)左右的數(shù)據(jù)一下子添加資源占用很大

          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

%>

這樣就完成數(shù)據(jù)庫(kù)的修改,對(duì)于dbpath.asp 文件下面講

2、  文件介紹

本程序分 dbpath.asp   和   search.asp

以下是源程序及簡(jiǎn)要描述

Dbpath.Asp 代碼如下:(本人命名數(shù)據(jù)庫(kù)名字為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

%>

<%

'建立一個(gè)提交的表單

%>

<BODY bgColor=azure>

<P align=center>IP查詢(xún)<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" >&nbsp;

<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>請(qǐng)輸入IP地址!</font></p>"

  else



'---判斷訪問(wèn)者的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

        

       '查詢(xún)IP地址數(shù)據(jù)庫(kù)

        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

          '對(duì)于類(lèi)似224.000.000.000~224.255.255.255的ip地址進(jìn)行處理

          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數(shù)據(jù)★<BR>如果你知道請(qǐng)告訴我!OICQ:30763914 謝謝!<BR>=尥蹶子=</font></P>

         <% else

          do while not rs.eof

           '*******處理country  or  local為空的情況,使用了按id倒排(why?因?yàn)楦鶕?jù)IP地址表可知,先列大地區(qū)的ip段,例如先列出歐洲的062.000.000.000~062.255.255.255,再列英國(guó)等IP段)

           '對(duì)后面三段IP進(jìn)行處理,是否在IP表內(nèi)

            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")%>&nbsp;&nbsp;<%=rs("local")%></font></center>

           <%

               '若查到數(shù)據(jù),馬上跳出以免占用資源

                          exit do

               else

            

              end if

              if rs.eof then

              '如果沒(méi)有打出提示

              %>

              <br><br><font size="2"><P align=center><%=listip%><br>★未知IP數(shù)據(jù)★<BR>如果你知道請(qǐng)告訴我!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>