2010-09-24 82 views
0

從JS(pinger)ping的Ameer Dawood ideea開始,當遠程IP是http服務器並請求HTTP驗證時,瀏覽器彈出窗口用戶名/密碼框。如何避免這種情況,如果遠程服務器請求認證,我們知道遠程服務器正在響應,我需要調用alive()函數(不適用於http://someBogusUser:[email protected] + ip,因爲它再次請求密碼,我不希望有保存在客戶端腳本:)的corect密碼)
代碼的主要部分是這樣的:從遠程IP請求HTTP驗證時ping問題JS問題

img = new Image(); 
img.onload = function() { alive()();}; 
img.onerror = function() { unreachable()();}; 

img.src = "http://" + ip; 
setTimeout(function() { unreachable();}, 1500); 

Curently我想要測試是否我可以使用一個XMLHttpRequest的readyState和狀態看看遠程IP是否響應。
任何人都有一個關於如何做到這一點的理念,或者知道另一種方法來測試一個IP是否存在於JS中。請不要給我服務器端解決方案(我正在使用它們+ AJAX)。

謝謝

編輯: 我認爲,網絡工作者將到達瀏覽器停止任何認證彈出,但他們不能處理DOM事件(onload事件,onError的),所以工人不能幫助... :(

+0

你爲什麼要這樣做?如果您不希望用戶輸入該網站的任何憑據,那麼爲什麼遠程站點是啓動還是關閉? – bzlm 2010-09-24 08:52:22

+0

這不是一個我試圖「ping」的網站,只是網絡中一些網絡設備的IP,其中一些網絡設備具有HTTP和請求認證,但其中大多數不是(它們具有snmp/ssh/telnet),請參閱我留給@bobince的評論。 – 2010-09-24 09:13:23

回答

1

我不認爲你能避免它

這個技巧是不是在這個詞的任何正常意義上的「平」;它不會「檢查的IP是活的」。這是一個HTTP請求,需要驗證,重定向HTTP和其他方面。 (當然,它不會'ping'沒有運行HTTP服務器的計算機。)任何遠程包含的方法(imgscriptstyleiframe)都有可能導致身份驗證。

對於XMLHttpRequest,由於同源策略,您將遇到問題。 IE和Opera將立即通過安全錯誤的任何嘗試失敗。 Firefox和WebKit會嘗試建立連接,雖然你不會得到任何可用的響應,所以你必須繼續猜測超時長度。這本身似乎對我來說很成問題。當然,期望任何給定網站的/頁面花費超過1.5秒的時間來返回完整的文檔並不意味着什麼。

總之,我不認爲'pinger'是可行的,除了有趣的實驗外。對於任何真正的工作,你將不得不繼續服務器端的ping。

+0

當我嘗試從沒有HTTP的管理型交換機上加載圖像時,當交換機連接到網絡時,它會激活(),當我拔下交換機時,它會觸發無法訪問()。我也不相信它,但經過幾次測試後,它似乎有效,現在我試圖理解它爲什麼起作用以及如何使用它(作爲你說的有趣的實驗)。你應該試試看。請參閱問題中的鏈接。 – 2010-09-24 09:08:58

+0

這取決於設備如何響應未連接的端口上的連接。如果端口「關閉」,您通常會很快失敗。如果根本沒有任何反應('潛行'端口),反應會很慢。如果您確切知道您正在測試的機器是什麼,以及它們將如何響應80端口上的探測器,它可能對某些事情有用。但不是在一般情況下。 – bobince 2010-09-24 09:13:28

+0

在某種程度上,Ameer Dawood的ping模擬器的ideea就像Diego Perini對於IE瀏覽器的DOMContentLoaded仿真 http://javascript.nwbox.com/IEContentLoaded/(以及據我所知,jQuery仍然使用他的IE瀏覽器解決方案)。它可以是一種「ping」模擬,在某些情況下可行,對我而言,如果我確切知道遠程IP的行爲方式,也許我可以使用它,並且我確切地知道IP有哪些HTTP,並且對於他們我可以退回到AJAX調用,併爲其他人使用JS「ping」模擬器。 – 2010-09-24 09:37:15