Giải quyết địa chỉ ip của tên máy chủ


85

Tôi có địa chỉ IP máy chủ DNS và tên máy chủ.

Sử dụng Java, làm cách nào để tìm địa chỉ IP của tên máy chủ do máy chủ DNS đó trả về bằng địa chỉ IP và tên máy chủ?


3
dig <hostname>trong một dòng lệnh?
ceejayoz

Cách thực hiện tương tự trong mã java và tôi nên sử dụng địa chỉ ip DNS-Server và tên máy chủ ở đâu.
Dark Matter

Một truy vấn khác, chúng tôi sẽ cần cung cấp địa chỉ ip Máy chủ DNS trong mọi trường hợp hay nó sẽ cố gắng tìm nó theo mặc định. Tôi hơi bối rối ở đây liệu chúng ta có cần chỉ sử dụng tên máy chủ hay tên máy chủ + địa chỉ ip dns-server không?
Dark Matter

1
Việc tra cứu địa chỉ sử dụng tên không phức tạp. Miễn là bạn chỉ sử dụng trình phân giải mặc định của hệ thống. Vậy: bạn có thực sự cần sử dụng địa chỉ máy chủ DNS không?
AH

Tôi có câu hỏi tương tự: Tôi thực sự cần địa chỉ máy chủ DNS hay nó sẽ giải quyết địa chỉ theo mặc định .BTW Tôi đang sử dụng máy chủ AIX Unix.
Dark Matter

Câu trả lời:


126

Hãy xem InetAddressgetHostAddress()phương pháp.

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 

Giả sử nếu tôi có địa chỉ ip dns 10.37.221.152 và tên máy chủ lưu trữ là "www.student.com" thì làm sao tôi có thể tìm được địa chỉ ip.
Dark Matter

3
@DarkMatter: InetAddressnên lấy địa chỉ được phân giải DNS khi bạn yêu cầu getHostAddress(). Tôi không chắc liệu bạn có thể buộc nó sử dụng một máy chủ DNS cụ thể hay không .
thegrinner

Vì vậy, lý tưởng nhất là nó phải tự giải quyết mà không cần lập trình viên chỉ định rõ ràng địa chỉ máy chủ DNS đúng không?
Dark Matter

1
@DarkMatter Có. Tôi tin rằng nó sử dụng bất kỳ máy chủ DNS nào được đặt trên chính máy tính.
thegrinner

29

Bạn có thể làm như thế này:

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

9

Bạn có thể sử dụng InetAddress cho việc này. Hãy thử đoạn mã dưới đây,

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

3

Như được đề xuất bởi tất cả ở trên, bạn có thể sử dụng InetAddress.getByName("hostName")nhưng điều này có thể cung cấp cho bạn một IP được lưu trong bộ nhớ cache, Đọc tài liệu java để biết cách tương tự. Nếu bạn muốn lấy IP từ DNS, bạn có thể sử dụng:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");

Ngoài những gì @daksh đã chỉ ra, bạn có thể vô hiệu hóa bộ đệm ẩn phản hồi DNS như được đề xuất ở đây nhưng hãy lưu ý về thời gian vô hiệu bộ nhớ đệm cũng như bộ nhớ đệm các phản hồi DNS được tạo bởi hệ điều hành của bạn cũng như các máy chủ DNS khác như được đề xuất tại đây . Hope this helps
CrazyGreenHand

Vì một số lý do mà cuộc gọi này cho tôi kết quả dương tính với bất kỳ tên máy chủ nào. Tôi nghĩ rằng tôi mặc định cho IP của mình, nhưng không, nó cung cấp cho tôi một số IP cụ thể cho bất kỳ máy chủ không xác định nào.
Imaskar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.