62398


現状、あるデバイスとの通信アプリを作っているのですが、そのデバイスを通して  
HPにアクセスするとHPのIPアドレスを送ってきます。

例えば、Yahooにアクセスした場合、「183.79.250.123」を返してくるので、  
アプリ上ではこれをドメイン「yahoo.co.jp」に直して表示させたいです。

どうすればプログラム上でIPをドメインに直して表示できるかご教授願えませんでしょうか。

InetAddressクラスを使えばなんとかできると思ったのですがうまくいきませんでした。

[code]

    URL url = new URL("http://183.79.250.123");
    try {
       InetAddress address = InetAddress.getByName(url.getHost());
       Host = address.toString();
    }catch(UnknownHostException e){
    }catch(NetworkOnMainThreadException e){
    }catch(Exception e){}
    
[/code]


CC BY-SA 4.0
2020-01-20T05:47:32.853
62378
2021-03-07T04:27:13.483
2021-03-07T04:27:13.483
3060
36805
question
java android
HPのIPアドレスをドメインになおしたい


参考になるかわかりませんが、nslookupをやっているソフトのURLを張っておきます。  
<https://github.com/hsccorp/cordova-dnsjava-
nslookup/blob/master/src/android/Nslookup.java>


CC BY-SA 4.0
2020-01-20T09:52:35.870
62386
2020-01-20T09:52:35.870
24490
62378
answer


ドメイン名と IP アドレスは1対1対応しませんので IP アドレスだけがあるとき、そこから元のドメイン名を取り戻すことはできません。ドメイン名っつか
URL を覚えておく必要があります。

ドメイン名から IP アドレスを求めることを DNS の正引きとか順引きとか言います。  
IP アドレスからドメイン名を求めることを DNS の逆引きといいます。  
この両者は１対１対応ではないので正引き元と逆引き結果は必ずしも一致しません。  
`Windows` では正引きを試すツールとして `nslookup` ってのがあります。

例：ドメイン名に複数の IP アドレスが振られている場合  
`yahoo.co.jp` や `google.co.jp` などアクセス数が極めて多いドメインには複数の IP
アドレスが降られています。アクセスがあるたび異なる IP アドレス＝異なるマシンに仕事を振ることで負荷分散しています。

[code]

    C>nslookup google.co.jp
    <中略> 以下同様
    Address:   172.217.25.227
    C>nslookup google.co.jp
    Address:   172.217.26.35
    C>
    
[/code]

例：複数のドメイン名に同一の IP アドレスが振られている場合  
`livedoor` ブログはたいてい `blog.livedoor.jp/<accountname>` でアクセスできます。  
最近は `<accountname>.livedoor.blog` でもアクセスできるものがあるようです。  
オイラの知り合いのブログもお引越しした際に、正式には後者の URL
が振られましたが、わざと前者の形式でアクセスするとアクセスできて、後者のアドレスに正規化されてしまいます。

例として `blog.livedoor.jp/staff` と `staff.livedoor.blog` なら例に出して問題ないでしょう。

[code]

    C>nslookup blog.livedoor.jp
    Address:  203.104.130.159
    C>nslookup staff.livedoor.blog
    Address:  203.104.130.159
    C>
    
[/code]

というわけで逆引き結果は人間が期待しているものと異なってよくて、最初の結論となります。


CC BY-SA 4.0
2020-01-20T13:27:44.077
62398
2020-01-20T13:27:44.077
8589
62378
answer


ここStack Overflowを例にとっても

[code]

    Name:    ja.stackoverflow.com
    Addresses:  151.101.129.69
              151.101.1.69
              151.101.65.69
              151.101.193.69
    
    Name:    stackoverflow.com
    Addresses:  151.101.65.69
              151.101.129.69
              151.101.193.69
              151.101.1.69
    
[/code]

となっていて、

  * <https://ja.stackoverflow.com> （日本語版）
  * <https://stackoverflow.com> （英語版）

どちらも同じIPアドレスを使用しています。当然、IPアドレスからホスト名に戻すことは不可能です。


CC BY-SA 4.0
2020-01-20T13:38:26.080
62399
2020-01-20T13:38:26.080
4236
62378
answer