标题: 全球IP地址查询完整版
啦啦
中校
Rank: 1



UID 10823
精华 2
积分 1662
帖子 800
威望 21
金币 819
热心 4
阅读权限 50
注册 2006-4-1
来自 武汉
状态 离线
全球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" >&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>请输入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")%>&nbsp;&nbsp;<%=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>

顶部
[广告] 免费域名(Free Subdomain) 免费空间(Free hosting) PR查询(Google Pagerank)



当前时区 GMT+8, 现在时间是 2008-10-12 12:49
信产部ICP备案:京ICP备05066424号 北京市公安局网监备案:1101050648号

Powered by Discuz! 5.5.0
清除 Cookies - 联系我们 - 网友俱乐部 - Archiver - WAP