2012-08-31 64 views
1

下面的代碼片段:爲什麼兩個IP有區別?

<%= InetAddress.getLocalHost() %> 

給出這樣的:Feddy/192.168.42.194

,但是當我檢查網站ipchicken,我得到這個:106.193.214.75

爲什麼兩個IP不同?

+0

也許Proxy功能? –

回答

4

106.193.214.75是您的網絡的公共IP地址。

192.168.42.194是您的本地IP地址 - 機器在內部網絡中的IP地址。網絡中的每臺計算機都具有相同的公共IP地址。

3

地址192.168.x.x僅用於私有內部網絡。你可以與互聯網交談的事實意味着你也有一個公共IP地址。

它是您的路由器做網絡地址轉換的工作,以便您的專用網絡上的設備都與您的公共地址一起顯示。

+0

+1提及NAT –

2

服務器位於NAT之後,與公共Internet上使用的IP地址相比,本地IP地址爲單獨的IP地址。

使用NAT有幾個原因,包括安全性和可用公共IPv4地址的限制。

0

一個是您的本地IP地址(來自您的路由器),另一個是通過Internet的IP地址。

192.168總是從路由器

+0

'rooter':-)) – hsz

+0

rooter,router,roster,總是一樣;) – mlemay

0

的IP 192.168.42.194是你的本地IP,它是由你的路由器給你的電腦。

對方IP的廣域網IP,它是由您的ISP給出的IP地址是你的路由器得到來自外界的連接

0

因爲192.168.42.194是你的私有IP,你的專用網絡上,並106.193.214.75您的公共網絡,由您的ISP分配給您的網關。

0

在JDK 1.6

List<InetAddress> addrs = new ArrayList<InetAddress>(); 
for(NetworkInterface ni : NetworkInterface.getNetworkInterfaces()) { 
    if(ni.isUp()) { 
     for(InetAddress addr : ni.getInetAddresses()) { 
     addrs.add(addr); 
     } 
    } 
} 

問候,

+0

我得到如下地址:'192.168.42.250 fe80:0:0:0:4c6e:3fff:fe24 :75a0%16' –

+0

第一個是本地IP地址,第二個是「公共」?如何將其轉換爲數字符號? –

+0

在這種情況下,您只有一個IP V4(192.168.42。250)和一個IP V6(fe80:0:0:0:4c6e:3fff:fe24:75a0%16),它與舊版本和新版本的輸入相同 –

1

192.168.xx.xx是您的網絡上的本地IP。 106.193.xxx是您的外部IP。

你可以既與下面的代碼:

 String hostName = InetAddress.getLocalHost().getHostName(); 

     InetAddress[] addresses = InetAddress.getAllByName(hostName); 
     for (InetAddress a: addresses) { 
      System.out.println(a.getHostAddress()); 
     } 
+0

我得到如下地址:192.168.42.250 fe80:0:0:0:4c6e:3fff:fe24:75a0%16 –

+0

第一個是本地IP地址,第二個是「公共」?如何將其轉換爲數字符號? –

+0

@ Y.E.P這是一個IP v6,而你似乎想要一個IP v4 - 你不能真正從一個轉換到另一個。 [這是一個替代解決方案](http://stackoverflow.com/questions/2939218/getting-the-external-ip-address-in-java)。 – assylias