2009-09-02 360 views
20

有什麼方法可以找到瀏覽器連接到的服務器的IP?對於例如如果瀏覽器正在訪問http://www.google.com,我們能否以任何方式告訴它連接了哪個IP?這在Round-robin DNS實施的情況下非常有用。所以說,第一個請求a.com結果1.1.1.1 &後續請求結果在1.1.1.2 &等。如何找出瀏覽器連接的服務器IP地址(使用JavaScript)?

我找不到任何方式使用JavaScript。它甚至有可能嗎?如果沒有,有沒有通用的方法來找到這個信息?

+0

一種方法可能是通過ajax爲location.host進行DNS查找。雖然這不完全是JS。 – Dencker 2015-04-14 07:28:21

+0

將此作爲相關問題查看:http://stackoverflow.com/questions/102605/can-i-perform-a-dns-lookup-hostname-to-ip-address-using-client-side-javascript – 2015-12-05 06:34:13

回答

12

相當肯定這不能做到。但是,您可以使用自己喜歡的服務器端語言將服務器的IP打印到客戶端,然後按照您的喜好使用它。例如,在PHP中:

<script type="text/javascript"> 
    var ip = "<?php echo $_SERVER['SERVER_ADDR']; ?>"; 
    alert(ip); 
</script> 

這取決於您的服務器的安全設置 - 雖然有些可能會阻止它。

+1

我們不使用PHP,但我明白了。即使服務器是NAT,這個工作是否會工作? – John 2009-09-03 00:39:04

+0

我真的不確定,你可以試試看 - 這很簡單。我創建了我在不到一分鐘內發佈的測試用例。 .NET,ColdFusion和我相信大多數其他服務器端語言都有其等價物! – 2009-09-03 01:03:22

+2

不,如果服務器是NAT並且只有內部IP,它將不正確。 – 2015-11-11 08:19:08

6

不確定如何獲取IP地址,但位置對象提供了答案的一部分。

例如這些變量可能會有所幫助:

  • self.location.host - 設置或獲取位置
  • self.location.hostname的主機名和端口號 - 設置或獲取 位置或URL中的主機名部分。
+0

self.location .origin - >提供協議+主機+端口 – 2017-05-08 21:47:46

5

你不能得到這一般。從Javascript,你只能得到HTTP頭,它可能有或沒有IP地址(通常只有主機名)。瀏覽器程序的一部分是將TCP/IP地址抽象出來,只允許你處理主機名。

1

實際上,沒有辦法通過JavaScript來做到這一點,除非你使用一些外部源。即使如此,它可能不是100%正確的。

34

試試這個作爲一種快捷方式,而不是作爲一個徹底的解決辦法(見註釋):

<script type="text/javascript"> 
    var ip = location.host; 
    alert(ip); 
</script> 

該解決方案不能在某些情況下工作,但它可以幫助快速測試。 Regards

+7

由於參數暗示('host'),這是URL的主機部分,而不是IP地址。 – matpie 2013-08-27 15:30:51

+0

@sirlancelot然後在某些情況下,主機和IP將匹配,而在其他情況下不會。 – Spacemonkey 2013-09-02 08:30:10

1

可以通過像Java applet或Flash這樣的插件來實現,然後讓Javascript調用applet中的函數或反過來(或者讓JS調用Flash或其他插件中的函數)並返回IP。這可能不是瀏覽器用於獲取頁面內容的IP。此外,如果有圖像,CSS,JS - >瀏覽器可能已經建立了多個連接。我認爲大多數瀏覽器只使用他們從DNS調用獲得的第一個IP(連接成功,不知道如果一個節點在獲得了少量資源後出現故障並且仍然有其他人使用 - 定時器/ ajax會添加引用其他HTML的HTML資源)。

如果需要對java applet進行簽名,建立與window.location的連接(從javascript獲得,如果applet是通用的並且可以在任何服務器的任何頁面上使用),否則返回到主服務器並使用java.net.Address獲取IP。

+0

FF在獲取頁面時應該公開主要IP和其用於各種資源的IP列表 - 在頁面選項中可能或可用於擴展。 – tgkprog 2014-04-24 12:13:35

0

我相信約翰的答案是正確的。例如,我正在通過會議中心運行的wifi服務使用我的筆記本電腦 - 我非常肯定,在瀏覽器中運行javascript無法發現服務提供商正在使用的IP地址。另一方面,可能會從javascript處理合適的外部資源。你可以自己編寫自己的程序,通過向服務器發送ajax調用,該服務器可以從HTTP頭獲取IP地址並返回它,或者嘗試使用Google搜索「查找我的IP」。最簡潔的解決方案可能是在提供頁面之前捕獲信息並將其插入返回給用戶的html中。 有關如何捕獲信息的信息,請參閱How to get a viewer's IP address with python?,如果您使用python提供頁面。

-2

我相信下面的代碼會幫你獲得ip地址。

<script type="application/javascript"> 
    function getip(json){ 
     alert(json.ip); // alerts the ip address 
    } 
</script> 

<script type="application/javascript" src="http://www.telize.com/jsonip?callback=getip"></script> 
+0

建議人們從隨機源碼加載代碼片段是一個安全噩夢。 (此外,正如該網站所述,「公共API將於2015年11月15日永久關閉」)。 – hashchange 2016-11-07 08:26:51

+0

另外,問題是關於服務器的IP,而不是客戶端。 – Andris 2018-01-23 17:46:58

1

我想你可以使用外部服務,但基於JavaScript location.host的輸出方式也許只是純粹的JSON數據使用回調從JSONP請求或:

$.getJSON("//freegeoip.net/json/" + window.location.host + "?callback=?", function(data) { 
    console.warn('Fetching JSON data...'); 
    // Log output to console 
    console.info(JSON.stringify(data, null, 2)); 
}); 

我會使用此代碼是爲了我個人的需要,因爲我第一次來到這個網站出於同樣的原因。

您可以使用另一個外部服務,而不是我正在使用的服務來滿足我的需要。一個非常好的列表存在,幷包含在這裏完成的測試https://stackoverflow.com/a/35123097/5778582

+0

問題是關於服務器的IP,這會給你的客戶端。 – Andris 2018-01-23 17:46:21

+0

查看js部分...'window.location.host'返回服務器名稱,所以服務將使用它並從客戶端返回服務器IP ...而不是客戶端IP – Jiab77 2018-01-23 17:49:29

+0

啊,我明白了,再右吧。部分。我想用它來檢查我連接的服務器是否在預定義的IP上,但是解析hosname會給官員,而不是實際的IP。 – Andris 2018-01-23 23:03:58

相關問題