1

以下片段:

<%= InetAddress.getLocalHost() %>

给出这个:Feddy/192.168.42.194

但是当我查看网站ipchicken时,我得到了这个:106.193.214.75

为什么这两个IP不同?

4

8 回答 8

4

106.193.214.75是您网络的公共 IP 地址。

192.168.42.194是您的本地 IP 地址 - 内部网络中机器的 IP。网络中的每台机器都有相同的公共 IP 地址。

于 2012-08-31T11:29:12.727 回答
3

地址 192.168.xx 仅用于私有内部网络。您可以与互联网交谈的事实意味着您也有一个公共 IP 地址。

您的路由器的工作是进行网络地址转换,以便您专用网络上的设备都显示为您的公共地址。

于 2012-08-31T11:29:04.010 回答
2

该服务器位于NAT后面,与在公共 Internet 上使用的 IP 地址相比,它在本地为其提供了一个单独的 IP 地址。

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

于 2012-08-31T11:29:23.250 回答
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());
         }
于 2012-08-31T11:32:38.713 回答
0

一个是您的本地 IP 地址(来自您的路由器),另一个是您在 Internet 上的 IP 地址。

192.168 始终来自路由器

于 2012-08-31T11:29:53.947 回答
0

ip 192.168.42.194 是您的本地 ip,它由您的路由器提供给您的电脑。

另一个 ip 是您的 WAN ip,它由您的 isp 提供,是您的路由器从外部世界连接获得的 ip 地址

于 2012-08-31T11:29:54.563 回答
0

因为192.168.42.194是您的私有 ip,在您的私有网络上,以及106.193.214.75您的公共 IP,由您的 ISP 分配给您的网关。

于 2012-08-31T11:30:04.003 回答
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);
      }
   }
}

问候,

于 2012-08-31T11:30:05.730 回答