次のスニペット:
<%= InetAddress.getLocalHost() %>
これを与える:Feddy / 192.168.42.194
しかし、私がウェブサイトipchickenをチェックすると、私はこれを取得します:106.193.214.75
2つのIPが異なるのはなぜですか?
次のスニペット:
<%= InetAddress.getLocalHost() %>
これを与える:Feddy / 192.168.42.194
しかし、私がウェブサイトipchickenをチェックすると、私はこれを取得します:106.193.214.75
2つのIPが異なるのはなぜですか?
106.193.214.75
ネットワークのパブリックIPアドレスです。
192.168.42.194
ローカルIPアドレスです-内部ネットワーク内のマシンのIP。ネットワーク内のすべてのマシンは、同じパブリックIPアドレスを持っています。
アドレス192.168.xxは、プライベート内部ネットワーク専用です。インターネットと通信できるということは、パブリックIPアドレスも持っていることを意味します。
プライベートネットワーク上のすべてのデバイスがパブリックアドレスとともに表示されるように、ネットワークアドレス変換を行うのはルーターの仕事です。
サーバーはNATの背後にあり、パブリックインターネットで使用されているものとは異なる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());
}
なぜなら192.168.42.194
、あなたのプライベートIPは、あなたのプライベートネットワーク上にあり、106.193.214.75
あなたのパブリックIPは、あなたのISPによってあなたのゲートウェイに割り当てられているからです。
JDK1.6では
List<InetAddress> addrs = new ArrayList<InetAddress>();
for(NetworkInterface ni : NetworkInterface.getNetworkInterfaces()) {
if(ni.isUp()) {
for(InetAddress addr : ni.getInetAddresses()) {
addrs.add(addr);
}
}
}
よろしく、
1つは(ルーターからの)ローカルIPアドレスで、もう1つはインターネット経由のIPアドレスです。
192.168は常にルーターからのものです
ip 192.168.42.194はローカルIPであり、ルーターからPCに渡されます。
もう1つのIPはWANIPであり、ISPによって指定され、ルーターが外部からの接続のために取得するIPアドレスです。