我從一個函數獲取以下一段代碼,該函數將主機名稱作爲輸入並假定爲該主機提取證書。我需要顯示遠程主機的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」。網站是有證書的東西 - 使用你想要的證書的網站。 –