Jur*_*y A 1 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();
Run Code Online (Sandbox Code Playgroud)
例如,当我运行程序时,主机是:"www.tesco.com",".getInetAddress()".将此IP返回给我:88.221.94.232.当我尝试在浏览器中输入此IP时,即使在向URL添加"https://"之后,它也会向我显示"无效的网址".然而,如果我试图ping"tesco.com",我会得到另一个IP:"212.140.185.177",如果我在浏览器中输入它,它会打开tesco的网页.
我有什么误会?除了getInetAddress和getHostAddress()之外还有其他方法来获取远程主机的IP地址(不使用套接字)吗?
您正在获取正确的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的网页.
因为该Web服务器确实知道您想要哪个网站,因为它只处理tesco.com,而不像www.tesco.com处理许多网站的服务器.
仔细观察,您会发现指向浏览器tesco.com会将您重定向到www.tesco.com.他们使用Akamai.