純ASP(VBscript)寫的全球IP地址搜
2024-05-04 11:06:14
供稿:網友
<%@language="vbscript" codepage="936"%>
<html>
<head>
<title>untitled document</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head>
<body>
<%
dim finishgetip,showip,allip
'////////////////////////////////////////////////////////////////////////////////////////
'程序還不是很精簡,以后再修改
'本程序所用的數據庫為-- “馮志宏”-- 所寫的--“追捕”--軟件中所帶ip數據庫和
' “國華軟件 guohua soft”的作者 --“馮國華”—所寫的“全球ip地址分配表.chm”合二為一得到的
'感謝“馮志宏”和“馮國華”提供的數據
'數據庫中還有不少的重復ip地址,希望有心人能將其刪除,減小數據庫
'我的程序寫的還很笨拙,希望大家能多提意見,多多交流,謝謝!
'////////////////////////////////////////////////////////////////////////////////////////
'解決思路:
'取得的客戶端ip一般是202.11.25.1這種,而數據庫中的ip格式為202.011.025.001,這就需要將取得的
'客戶端ip轉換為與數據庫中ip一樣的格式
'因為目前我們所用的ip是分為4段,每段3位,中間以“.”分隔
'所以我的思路是將客戶端ip以“.”符號分割為4段,即202/11/25/1
'然后再分別核對每一段,如果是3位,則不變;如不足3位,為2位,該段前補1個0,為1,同理,則補2個0
'得到格式化后的ip后,去掉ip的最后一段,即取包括“.”的前11位,與數據庫中的startip字段的前11位相比較,查找相同的值
'因為從數據庫中可以看到,startip和endip的前三段都是一樣的,而最后一段不過是內部子網地址,可以去掉
'所以只要取startip或endip的任意一個字段的前11位與客戶端ip的前11位相比較就可以查到正確的所在地
'/////////////////////////////////////////////////////////////////////////////////////////
function checkip_trueip()
'取客戶端真實ip
getclientip = request.servervariables("http_x_forwarded_for") '如果客戶端用了代理服務器,則用request.servervariables("remote_addr")方法只能得到空值,則應該用servervariables("http_x_forwarded_for")方法
if getclientip = "" then
getclientip = request.servervariables("remote_addr")'如果客戶端沒用代理,則request.servervariables("http_x_forwarded_for")得到是空值,應該用request.servervariables("remote_addr")方法
end if
checkip_trueip = getclientip
end function
'/////////////////////////////////////////////////////////////////////////////
function getaccessrecordset(db,sql,mark,read)'取得recordset對象
set conn=getaccessconn(db)'輸入參數為db-數據庫的相對路徑,sql-sql語句,mark,read為數據庫讀取方式,1,1為只讀,1,3為讀寫
'constr="provider=microsoft.jet.oledb.4.0;"&"data source="&server.mappath(db)
' conn.open constr
set getaccessrecordset=server.createobject("adodb.recordset")
getaccessrecordset.open sql,conn,mark,read
end function
'//////////////////////////////////////////////////////////////////////////
function getaccessconn(db)'取得connection對象
set getaccessconn=server.createobject("adodb.connection")
'constr="driver={microsoft access driver (*.mdb)};dbq="&server.mappath("allcon/#bbsall.mdb")
constr="provider=microsoft.jet.oledb.4.0;"&"data source="&server.mappath(db)
getaccessconn.open constr
end function
'/////////////////////////////////////////////////////////////////////////
dim getip
'getip=(trim(request.servervariables("remote_addr")))'從客戶端獲取ip
'getip=(trim(request.querystring("comes"))) '自己輸入ip測試
'response.write(getip&"<br>")
'////////////////////////////////////////////////////////////////////////
function checkip_locations(checkstring) '返回ip中分隔字符的位置函數
checkip_locations=instr(checkstring,".") '將位置的值賦予給函數
end function
'///////////////////////////////////////////////////////////////////////
'以下函數為分割ip,取得每次分割后“.”符號右邊的ip剩余的字符串
function checkip_left(checkstring)
locations_left=checkip_locations(checkstring) '得到在ip剩余的字符串中“.”第一次出現的位置
iplength_left=len(checkstring) '取得ip剩余的字符串的長度
divide_locations_left=iplength_left-locations_left '取得在ip剩余的字符串中“.”第一次出現的位置,從右往左數是多少位
ipstr_left=right(checkstring,divide_locations_left) '取得本次分割后,“.”符號右邊的ip剩余的字符串
checkip_left=ipstr_left '將上面得到的字符串賦給函數
end function
'///////////////////////////////////////////////////////////////////////
'以下函數為分割ip,取得每次分割后“.”符號左邊的ip字符串,即將ip分為四段,每一段的字符串
function checkip_right(checkstring)
locations_right=checkip_locations(checkstring) '取得在ip中“.”第一次出現的位置
iplength_right=len(checkstring) '取得ip字符串長度
divide_locations_right=iplength_right-locations_right '取得在ip剩余的字符串中“.”第一次出現的位置,從右往左數是多少位
ipstr11=trim(replace(left(checkstring,locations_right),".","")) '將得到的“.”左邊的字符串去掉"."符號
'如果ip分為4段后每一段不足3位則補0
if len(ipstr11)="2" then ipstr11="0"&ipstr11
if len(ipstr11)="3" then ipstr11=ipstr11
if len(ipstr11)="1" then ipstr11="00"&ipstr11
checkip_right=ipstr11 '得到“.”符號之前的字符串,即本次分割后得到的ip分割為四段后其中的一段
end functi 國內最大的酷站演示中心!