2011-07-19 37 views
5

Tôi biết DNS thường được xử lý bởi hệ điều hành, nhưng tôi đang làm việc với giả định rằng DNS đã bị hỏng trên hệ thống đích (đây là một công cụ để chẩn đoán cấu hình sai DNS). Vì vậy, tôi cần phải thực hiện DNS bản thân mình, để kiểm tra kết quả tôi nhận được từ hệ thống chống lại một máy chủ DNS tốt được biết đến. Bạn có thể thực hiện điều này bằng các công cụ NSLookup hoặc Dig, chỉ định địa chỉ máy chủ DNS theo cách thủ công, nhưng nó xuất hiện các lệnh gọi API Windows để thực hiện việc này (ví dụ: GetAddressByName) không cho phép tôi chỉ định máy chủ truy vấn và sử dụng thay vào đó, hãy nhắm mục tiêu được định cấu hình của hệ thống.Tôi có thể tìm thư viện DNS C++ ở đâu?

Tôi đã cố tìm kiếm RFC trên DNS, nhưng tiếc là chúng rõ ràng là bùn đối với tôi - chúng làm cho thông số HTTP trông giống như thông số rõ ràng nhất và được viết tốt nhất từng được sản xuất.

Tôi cũng không muốn phát minh lại điều gì đó mà người khác đã thực hiện nhiều lần trước đây.

+0

Tôi không hiểu câu hỏi. DNS có thể bị định cấu hình sai nhưng đó không phải là lý do để cần một API thay thế.'gethostbyname()' và bạn bè sẽ vẫn cho bạn biết * là gì * trong cấu hình. – EJP

+0

@EJP: Erm, no, gethostbyname chỉ thực hiện tra cứu. Nếu cấu hình sai, nó chỉ thất bại. Không có cách nào có lập trình để báo cho hàm sử dụng các máy chủ DNS cụ thể cần thiết. (Không thay đổi cài đặt chung cho DNS, nhưng tôi không thay đổi trạng thái toàn cục để giải quyết vấn đề cục bộ) –

Trả lời

0

Hãy thử the c-ares library, khi tôi hiểu nó thực hiện ngăn xếp DNS của chính nó. Tôi đã sử dụng nó thành công trên Linux, và họ nói rằng nó hỗ trợ Windows, mặc dù tôi đã không thử nó bản thân mình. Nó không phải là C++, chỉ đơn giản là C, nhưng bạn có thể dễ dàng viết một trình bao bọc C++ cho nó.

Nó nhận điểm thưởng vì không đồng bộ và cung cấp các móc mà bạn có thể tích hợp nó với vòng lặp sự kiện hiện có.

0

djbdns chứa một thư viện client DNS mà bạn có thể sử dụng:

http://cr.yp.to/djbdns/dns.html

này độc lập với các thư viện giải quyết hệ thống DNS và sẽ tạo ra các gói UDP đúng. Nếu bạn thực sự muốn có được thông minh, bạn có thể kết hợp nó với dnscache, hoặc nhìn vào tiện ích dnstrace để giải quyết tên từ các máy chủ gốc và xem những gì đang thực sự xảy ra.

Bạn cần phải làm cho nó hoạt động trên Windows, tất nhiên. Không nên là khó khăn.

0

Tôi muốn đề xuất libunbound (cùng với ldns) là một thư viện độc lập đi kèm với trình phân giải đệ quy chưa được gửi.

Nó cũng có hỗ trợ xác thực DNSSEC, sẽ trở nên hữu ích khi DNSSEC tiếp tục được triển khai.

Xem http://unbound.net/

1

Tôi biết rằng câu hỏi là cũ, nhưng tôi đã không tìm thấy câu trả lời tốt cho tôi ở đây. Tôi đã tìm thấy poslib là thư viện dns tốt nhất với giao diện rất dễ dàng.

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