全球IP地址查詢完整版
發(fā)表時(shí)間:2024-06-20 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]突然在某某網(wǎng)站看到IP地址查詢,于是心血來潮做了一個(gè)。這是用asp查詢?nèi)騃P地址的程式,由于類似的的用Asp查詢IP的速度不是很理想,本人使用的也是宏志宏的IP地址數(shù)據(jù)庫,只是對(duì)它進(jìn)行了改進(jìn)。本人在 win98+pws+access2000上測(cè)試通過,效果比較理想。數(shù)據(jù)庫的設(shè)計(jì)在一個(gè)軟件中的比例...
突然在某某網(wǎng)站看到IP地址查詢,于是心血來潮做了一個(gè)。這是用asp查詢?nèi)騃P地址的程式,由于類似的的用Asp查詢IP的速度不是很理想,本人使用的也是宏志宏的IP地址數(shù)據(jù)庫,只是對(duì)它進(jìn)行了改進(jìn)。
本人在 win98+pws+access2000上測(cè)試通過,效果比較理想。
數(shù)據(jù)庫的設(shè)計(jì)在一個(gè)軟件中的比例,毫不夸張的說占60%,雖然這是一個(gè)小的程式,但也得到一定的體現(xiàn)。
有任何錯(cuò)誤或建議請(qǐng)一定要給我發(fā)E-mail: ljz811@163.com ,我也不了解“追捕”等類似算法,歡迎交流,謝謝!
好了廢話少說,開始吧。
1、 轉(zhuǎn)wry.dll為.mdb由于我們要優(yōu)化數(shù)據(jù)庫(適合我們用的),建議這樣做:
將文件改為wry.xls用Excel打開。
在Access中新建表IP
字段名 類型 長度 說明
------------------------------------------------------------------------------------------------------------
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所在國家或省
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ì)于一萬個(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ù)庫的修改,對(duì)于dbpath.asp 文件下面講
2、 文件介紹
本程序分 dbpath.asp 和 search.asp
以下是源程序及簡要描述
Dbpath.Asp 代碼如下:(本人命名數(shù)據(jù)庫名字為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查詢<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>請(qǐng)輸入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地址數(shù)據(jù)庫
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ì)于類似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,再列英國等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")%> <%=rs("local")%></font></center>
<%
'若查到數(shù)據(jù),馬上跳出以免占用資源
exit do
else
end if
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>
<%
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>