.getInetAddress()的返回不是实际的IP

时间:2012-06-30 10:52:55

标签: java sockets network-programming network-security

我从一个函数中得到以下代码,该函数将主机名作为输入,并且应该为该主机提取证书。我需要显示远程主机的IP地址。我使用“.getInetAdress()”来返回远程主机的IP:http://docs.oracle.com/javase/1.5.0/docs/api/java/net/Socket.html#getInetAddress()。

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();

System.out.println("Starting SSL Socket For "+hostname+" port "+port);
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port);

//To get the IP for the remote host. Format: (domain name/IP), 
//then manually covert it to string

String remoteIP=socket.getInetAddress().toString();
System.out.println("Remote address = " + remoteIP);

socket.startHandshake();     
Certificate[] serverCerts = socket.getSession().getPeerCertificates();

例如,当我运行程序时,主机是:“www.tesco.com”,“。getInetAddress()”。将此IP返回给我:88.221.94.232。当我尝试在浏览器中输入此IP时,即使在向网址添加“https://”之后,它也会向我显示“无效网址”。然而,如果我试图ping“tesco.com”,我会得到另一个IP:“212.140.185.177”,如果我在浏览器中输入它,它会打开tesco的网页。

我误解了什么?除了getInetAddress&之外还有其他方法吗? getHostAddress()获取远程主机的IP地址(不使用套接字)?

1 个答案:

答案 0 :(得分:7)

您获得了正确的IP地址。

  

例如,当我运行程序时,主机是:“www.tesco.com”,“。getInetAddress()”。将此IP返回给我:88.221.94.232。

右。这就是你为www.tesco.com获得的IP地址。

  

当我尝试在浏览器中输入此IP时,它会显示“无效的网址”。

因为该服务器(Akamai加速器)不知道您想要哪个网站。

  

然而,如果我试图ping“tesco.com”,我会得到另一个IP:“212.140.185.177”

是的,因为tesco.comwww.tesco.com不同。

  

如果我在浏览器中输入它,它会打开tesco的网页。

因为该Web服务器确实知道您想要哪个网站,因为它只处理tesco.com,与处理许多网站的www.tesco.com处理的服务器不同。

如果仔细观察,您会发现将浏览器指向tesco.com会将您重定向到www.tesco.com。他们使用Akamai。