以下片段:
<%= InetAddress.getLocalHost() %>
给出这个:Feddy/192.168.42.194
但是当我查看网站ipchicken时,我得到了这个:106.193.214.75
为什么这两个IP不同?
106.193.214.75
是您网络的公共 IP 地址。
192.168.42.194
是您的本地 IP 地址 - 内部网络中机器的 IP。网络中的每台机器都有相同的公共 IP 地址。
地址 192.168.xx 仅用于私有内部网络。您可以与互联网交谈的事实意味着您也有一个公共 IP 地址。
您的路由器的工作是进行网络地址转换,以便您专用网络上的设备都显示为您的公共地址。
该服务器位于NAT后面,与在公共 Internet 上使用的 IP 地址相比,它在本地为其提供了一个单独的 IP 地址。
使用 NAT 有几个原因,包括安全性和可用公共 IPv4 地址的限制。
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());
}
一个是您的本地 IP 地址(来自您的路由器),另一个是您在 Internet 上的 IP 地址。
192.168 始终来自路由器
ip 192.168.42.194 是您的本地 ip,它由您的路由器提供给您的电脑。
另一个 ip 是您的 WAN ip,它由您的 isp 提供,是您的路由器从外部世界连接获得的 ip 地址
因为192.168.42.194
是您的私有 ip,在您的私有网络上,以及106.193.214.75
您的公共 IP,由您的 ISP 分配给您的网关。
在 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);
}
}
}
问候,