我从一个函数中得到以下代码,该函数将主机名作为输入,并且应该为该主机提取证书。我需要显示远程主机的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地址(不使用套接字)?
答案 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.com
与www.tesco.com
不同。
如果我在浏览器中输入它,它会打开tesco的网页。
因为该Web服务器确实知道您想要哪个网站,因为它只处理tesco.com
,与处理许多网站的www.tesco.com
处理的服务器不同。
如果仔细观察,您会发现将浏览器指向tesco.com
会将您重定向到www.tesco.com
。他们使用Akamai。