1

我从一个函数中获得了以下代码,该函数将主机名作为输入并应该提取该主机的证书。我需要显示远程主机的 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 时,它给了我“无效的 URL”,即使在 URL 中添加了“https://”之后也是如此。同时,如果我尝试 ping “tesco.com”,我会得到另一个 IP:“212.140.185.177”,如果我在浏览器中输入它,它会打开 tesco 的网页。

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

4

1 回答 1

7

您正在获取正确的 IP 地址。

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

正确的。这就是您获得的 IP 地址www.tesco.com

当我尝试在浏览器中键入此 IP 时,它给了我“无效的 URL”。

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

同时,如果我尝试 ping “tesco.com”,我会得到另一个 IP:“212.140.185.177”

对,因为tesco.com不一样www.tesco.com

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

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

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

于 2012-06-30T10:56:08.643 回答