Mengatasi alamat ip dari nama host

88

Saya memiliki alamat IP server DNS dan nama host.

Dengan menggunakan Java, bagaimana saya bisa menemukan alamat IP dari nama host yang dikembalikan oleh server DNS itu dengan menggunakan alamat IP dan nama host?

Materi Gelap
sumber
3
dig <hostname>di baris perintah?
ceejayoz
Bagaimana melakukan hal yang sama dalam kode java dan di mana saya harus menggunakan alamat ip DNS-Server dan nama host.
Dark Matter
Pertanyaan lain apakah kita perlu memberikan alamat ip Server DNS dalam hal apa pun atau akan mencoba menemukannya secara default. Saya agak bingung di sini apakah kita hanya perlu menggunakan nama host atau nama host + alamat ip dns-server juga?
Dark Matter
1
Pencarian alamat menggunakan nama tidaklah rumit. Selama Anda hanya menggunakan resolver default sistem. Jadi: apakah Anda benar-benar perlu menggunakan alamat server DNS?
H
Saya memiliki pertanyaan yang sama: Apakah saya benar-benar memerlukan alamat server DNS atau akankah itu menyelesaikan alamat secara default. BTW Saya menggunakan server AIX Unix.
Dark Matter

Jawaban:

131

Lihatlah InetAddressdan getHostAddress()metodenya.

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
thegrinner
sumber
Katakanlah jika saya memiliki alamat ip dns 10.37.221.152 dan nama host mengatakan "www.student.com" lalu bagaimana saya dapat menemukan alamat ip tersebut.
Dark Matter
3
@DarkMatter: InetAddressseharusnya mendapatkan alamat penyelesaian DNS saat Anda memintanya getHostAddress(). Saya tidak yakin apakah Anda dapat memaksanya untuk menggunakan server DNS tertentu .
thegrinner
Jadi idealnya harus menyelesaikan dengan sendirinya tanpa programmer menentukan alamat server DNS secara eksplisit kan?
Dark Matter
1
@Ya. Saya percaya itu menggunakan server DNS apa pun yang diatur di komputer itu sendiri.
thegrinner
31

Anda bisa melakukannya seperti ini:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com"))
    System.out.println(addr.getHostAddress());
Walery Strauch
sumber
9

Anda dapat menggunakan InetAddress untuk ini. Coba kode di bawah ini,

InetAddress address = InetAddress.getByName("www.yahoo.com");
System.out.println(address.getHostAddress());
System.out.println(address.getHostName());
Abhinaba Basu
sumber
3

Seperti yang disarankan oleh semua di atas, Anda dapat menggunakan InetAddress.getByName("hostName")tetapi ini dapat memberi Anda IP cache, Baca dokumentasi java untuk hal yang sama. Jika Anda ingin mendapatkan IP dari DNS, Anda dapat menggunakan:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");
daksh
sumber
Selain apa yang @daksh tunjukkan, Anda dapat menonaktifkan cache respons DNS seperti yang disarankan di sini, tetapi perhatikan waktu penonaktifan cache serta caching respons DNS yang dibuat oleh OS Anda serta server DNS lainnya seperti yang disarankan di sini . Semoga ini bisa membantu
CrazyGreenHand
Untuk beberapa alasan panggilan ini memberi saya hasil positif untuk sembarang nama host. Saya pikir saya default ke IP saya, tetapi tidak, itu memberi saya beberapa IP khusus untuk host yang tidak dikenal.
Imaskar