我从一个函数获取以下一段代码,该函数将主机名称作为输入并假定为该主机提取证书。我需要显示远程主机的IP地址。我使用“.getInetAdress()”来返回远程主机的IP:http://docs.oracle.com/javase/1.5.0/docs/api/java/net/Socket.html#getInetAddress()。.getInetAddress()的返回不是实际的IP
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添加“https://”后,它也会给我“无效的URL”。而如果我试图ping“tesco.com”,则会得到另一个IP:“212.140.185.177”,如果我在浏览器中键入它,则会打开tesco的网页。
我误解了什么?除getInetAddress & getHostAddress()以外,是否还有其他方法可以获取远程主机的IP地址(不使用套接字)?
因此,为了确保我找到了您的答案,这意味着“88.221.94.232”是托管许多网站的托管服务器,不仅仅是特易购。这给我带来了另一个问题,如果我想为支持SSL的服务器(为用户提供证书以确保交易期间安全通信的服务器,如tesco和amazon等)提取证书,那就意味着我创建了我的套接字(请参阅以我的代码获取更多信息):“tesco.com”而不是“www.tesco.com”?? –
另外,如果可能的话,我需要一般的答案,不仅仅是我的tesco例子:我应该使用什么主机名来提取证书?它与www。或没有? –
是的,它是一个托管服务器(实际上它不止一个,它是Akamai,它们在全球都有服务器)。如果您需要网站“tesco.com”的证书,请使用“tesco.com”。如果您需要网站“www.tesco.com”的证书,请使用“www.tesco.com”。网站是有证书的东西 - 使用你想要的证书的网站。 –