瀏覽圖片得到對方IP做法


Tek 發表



網頁程式透過網頁得到瀏覽者IP,很平常• 網頁程式透過圖片要IP.... 不常聽到...

利用ASP語言有辦法讓一個瀏覽者光是看到一個圖片就可以得到對方IP的做法,其實就
跟一般得IP的方法一樣! 對方必須去瀏覽你的網頁,才可以得到IP• 但為什麼圖片會
有辦法? 很簡單... 如果您把圖片儲存進資料庫的話,那麼對方要讀取圖片時,就
需要用到資料庫來得到資料• 相信大家也知道,要從資料庫得到資料,要必須透過
網頁程式才可以• 透過這一個處理顯示圖片的網頁,才有辦法讀到圖片,而在讀圖片
的同時,這一個處理圖片的網頁也悄悄的得到了你的IP• 這就是他怎麼工作的!

運作的樣子:
瀏覽者要求資料 -> 網頁處理資料(開始得IP) -> 從資料庫取出資料 -> 傳回資料

因為這樣,您所看到的圖片不會是blah.gif或者test.jpg或hello.bmp這類的圖片
路逕• 你所看到的圖片路逕可能會是 http://www.xxx.xxx.com.tw/pic.asp?id=2
這類的路逕• 網址上的意思為『到http://www.xxx.xxx.com.tw/這一個網站的目錄
中讀取pic.asp這一個網頁(處理圖片的網頁),並指定圖片的ID給他(id=2)

當一個資料儲存在一個資料庫時,通常都需要透過網頁得到資料• 而就是因為這樣,
你可以在處理圖片網頁中做任何跟一般網頁一樣的動作•(包括限制從資料庫要求資料、
拿IP、或者是要求電腦名稱等等)

這一次我利用的資料庫,是Microsoft Access•
這一次只給一個簡單的觀念,大家可以從範本中學習到您沒用過的語法等•

程式簡介:
Tek做了圖片上傳的介面,處理上傳圖片的網頁還有處理顯示圖片的網頁• 另外也有
給大家看瀏覽IP的網頁(觀看什麼IP瀏覽了自己的圖片

第一頁:(default.asp-上傳圖片的網頁)

<!----上傳圖片介面----->
<script language="VBS">
sub launch()
if document.myform.imagepath.value = "" then
alert("請勿空白")
else
myframe.style.display = "none"
s.innertext = "上傳中,請稍後...."
myform.submit
end if
end sub
</script>
<div id="myframe" style="display:">
<form name="myform" action="upload.asp" enctype="multipart/form-data" method="post">
<font size="2">圖片上傳位置</font>
<input type="file" name="imagepath" value="瀏覽" size="21" style="border: 1px solid #808080; background-color: #FFFFFF">
<input type="button" value="上傳" onclick="launch()" style="border: 1px solid #808080"></div><font id="s"></font>
</form>

第二頁:(upload.asp-處理圖片的網頁)

<%

'處理圖片上傳的網頁,及顯示圖片在資料庫的位置
'''''''''''''''''''''''''''''''''''''
'Coded by Tek, for instruction only!
'''''''''''''''''''''''''''''''''''''
on error resume next

dim total_byte
dim b_read
dim arr
dim divider
dim dbstart
dim dbend
dim mydb

total_byte = Request.totalbytes
b_read = Request.BinaryRead(total_byte)
arr = ChrB(13) & ChrB(10)
divider = leftb(b_read,clng(instrb(b_read,arr))-1)
dbstart = instrb(b_read,arr & arr) + 4
dbend = instrb(dbstart +1,b_read,divider) - dbstart
mydb = midb(b_read,dbstart,dbend)

set objconn = server.createobject("Adodb.connection")
objconn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("myimage.mdb")
set storage = server.createobject("adodb.recordset")
storage.open "select *from [images]",objconn,1,3

if err.number <> 0 then
response.write "發生錯誤("& err.number &")<br>" & err.source & err.description
response.end
end if

storage.filter = "where image_code is null"
storage.addnew
storage("mypic").appendchunk mydb
storage.update
storage.filter = ""

response.write "<font size='2'>"
response.write "完成!請選擇一個圖片,處理顯示圖片的ASP位置必須自己另外填寫...</font><br>"
do until storage.eof = true
response.write "showpic.asp?img_id=" & storage("image_code") & "<br>"
storage.movenext
loop

storage.close
set storage = nothing
set objconn = nothing
response.end

'Brinkster customers:
'If you upload this program onto Brinkster.com, you will need to erase "on error resume next"
'

%>

第三頁:(showpic.asp-處理圖片顯示的網頁)

<%

'處理顯示圖片的網頁,同時記錄IP
''''''''''''''''''''''''''''''''''''''
'coded by Tek, for instrunction only!
''''''''''''''''''''''''''''''''''''''

dim conn
dim rs
dim id
dim exe
dim ip(2)
id = request.querystring("img_id")

if isnumeric(id) = false then
response.write "ID 指定時發生錯誤"
response.end
end if

ip(0) = request.servervariables("remote_addr")
ip(1) = request.servervariables("http_x_forwarded_for")
ip(2) = ""

if ip(0) = "" then
ip(2) = ip(1)
elseif ip(1) = "" then
ip(2) = ip(0)
else
ip(2) = "unknown"
end if

set conn = server.createobject("adodb.connection")
conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("myimage.mdb")
set rs = server.createobject("Adodb.recordset")
rs.open "Select *from [images] where image_code = "& int(id) &"",conn,1,3

if rs.eof = true then
response.write "圖片不存在"
response.end
else
set exe = server.createobject("adodb.recordset")
exe.open "select *from [mylog]",conn,1,3
exe.addnew
exe("ip") = ip(2)
exe.update
exe.close
set exe = nothing
response.contentType = "image/*"
response.binarywrite rs("mypic").getchunk(7500000)
end if
rs.close
set rs= nothing
set conn = nothing

%>

第四頁:(lookup.asp-IP閱讀記錄頁)

<%
'閱覽瀏覽圖片人的IP顯示
dim objconn
dim rs
set objconn = server.createobject("adodb.connection")
objconn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("myimage.mdb")
set rs = server.createobject("Adodb.recordset")
rs.open "select *from mylog",objconn,1,3
if rs.eof = true then
response.write "無瀏覽資料記錄"
else
for amount = 1 to rs.recordcount
response.write "觀看者:" & rs("ip") & "<br>"
rs.movenext
next
end if
%>

額外頁:(test.htm-可讓您看看要怎麼顯示這一個從資料庫來的圖片)

<img src="showpic.asp?img_id=1">

您可以直接將範本打開,然後直接在您的IIS/PWS上直接執行test.htm就可以看到效果,並且在到
lookup.asp網頁看,您的IP會因為看了圖片而被記錄在上面•

注意:
如果您的網頁是傳在brinkster.com,注意upload.asp 中要把以下的程式部份拿掉,否則brinkster.com
會說有誤•(其實應該是不準用裡頭的這段語法)


(一)
on error resume next

(二)
if err.number <> 0 then
response.write "發生錯誤("& err.number &")<br>" & err.source & err.description
response.end
end if

最後更新日期: 8/25/2002 1:14:55 PM