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に「https://」を追加した後でも「無効なURL」が表示されます。一方、「tesco.com」にpingを実行しようとすると、別のIP「212.140.185.177」が表示されます。ブラウザに入力すると、tescoのWebページが開きます。

私は何を誤解していますか?getInetAddress&getHostAddress()以外に、(ソケットを使用せずに)リモートホストのIPアドレスを取得する方法はありますか?

4

1 に答える 1

7

正しいIPアドレスを取得しています。

たとえば、プログラムを実行すると、ホストは「www.tesco.com」、「。getInetAddress()」になります。このIPを私に返します:88.221.94.232。

右。これが、取得したIPアドレスですwww.tesco.com

このIPをブラウザに入力しようとすると、「無効なURL」が表示されます。

そのサーバー(Akamaiアクセラレーター)は、どのWebサイトが必要かわからないためです。

一方、「tesco.com」にpingを実行しようとすると、「212.140.185.177」という別のIPが取得されます。

そうです、はとtesco.com同じではないからですwww.tesco.com

ブラウザに入力すると、tescoのWebページが開きます。

tesco.comそのWebサーバーは、多くのWebサイトを処理するサーバーとは異なり、処理するだけなので、必要なWebサイトを認識していたためwww.tesco.comです。

よく見ると、ブラウザをに向けるとにtesco.comリダイレクトされることがわかりますwww.tesco.com。彼らはアカマイを使用しています。

于 2012-06-30T10:56:08.643 に答える