2012-05-11 52 views
9

Trong ứng dụng java của tôi nếu người dùng nhập IP, chúng tôi cần hiển thị tên máy chủ, nếu tên máy chủ được cung cấp thì chúng tôi cần hiển thị IP của máy chủ.chuyển đổi địa chỉ IP thành tên máy chủ

Ví dụ: nếu người dùng nhập địa chỉ IP như 173.194.36.37, ứng dụng sẽ hiển thị google.com và ngược lại.

Có tiện ích nào để thực hiện thao tác này không?

+0

bạn biết rằng số IP có thể có một số tên máy chủ? ví dụ 127.0.0.1 có * cả * localhost và localhost.localdomain – vidstige

+0

@vidstige Không có DNS ngược. Ở đây, IP được ánh xạ tới chính xác một tên máy chủ, cái gọi là "tên máy chủ hợp quy". – glglgl

+1

bạn không thể nhận được kết quả duy nhất, xem http://aruljohn.com/ip2hostname.html cho 173.194.36.37 xem bom04s02-in-f5.1e100.net không phải google.com! – SjB

Trả lời

17

Nếu bạn đang mã hóa trong Java, hãy thử sử dụng InetAddress

InetAddress addr = InetAddress.getByName("173.194.36.37"); 
String host = addr.getHostName(); 
System.out.println(host); 
+4

Rõ ràng, đừng quên xử lý ngoại lệ cho UnknownHostException. – ccKep

2

Những gì bạn đang tìm kiếm được gọi là DNS. This project dường như là những gì bạn đang tìm kiếm.

+0

Không cần mang theo thư viện của bên thứ ba nếu có 'InetAddress.getHostName()'. –

+2

@PhilippReichart Câu hỏi cho biết "Có bất kỳ tiện ích nào có sẵn không", vì vậy tôi nghĩ tại sao không phải thư viện của bên thứ ba nguồn mở. –

+0

@PrakashK Đơn giản. Tại sao mang lại * trên 100 * lớp học khi tất cả các bạn muốn có thể đạt được bằng cách gọi một phương pháp hiện có? Phần ít di chuyển hơn, ít đi sai. –

0

Xét về tên miền, có được không được xây dựng trong các tiện ích, không có. Bạn có thể lấy tên của máy chủ lưu trữ (nhưng không phải tên miền) bằng cách sử dụng getCanonicalHostName() trên InetAddress - điều đó sẽ hoạt động. Câu trả lời hay nhất ở đây liên quan đến dự án DNS Java, sẽ giúp bạn có được tên miền.

Ví dụ mã để kết nối với, và nhận được tên máy chủ từ, một trong những máy chủ của Google được đưa ra dưới đây:

public class GetHostName { 
public static void main(String[] args) throws Exception { 
    InetAddress address = InetAddress.getByAddress(new byte[]{74, 125,(byte) 227, 7}); 
    System.out.println(address.getCanonicalHostName()); 
} 
} 
2

Các SomeKittens dự án giới thiệu đến bạn trông giống như một máy chủ DNS hoàn toàn viết bằng Java, mà có thể nhiều hơn bạn cần. Hãy xem java.net.InetAddress:

java.net.InetAddress.getByName("example.com").getHostAddress(); 
+0

Đối với Google.com, mã này cho tôi kết quả là "74.125.237.100". – Jon

+0

Và điều này là đúng, phải không? Nếu tôi truy cập vào http://74.125.237.100/, tôi kết thúc tại google.com. – Brian

+0

No. OP yêu cầu thứ gì đó sẽ cung cấp cho bạn tên miền được cấp địa chỉ IP. Đoạn mã trên cho phép đảo ngược hoàn toàn - một địa chỉ IP được cấp một tên miền. – Jon

Các vấn đề liên quan