2009-07-14 8 views
6

Làm cách nào để nhận được chức năng tương tự như lệnh host bằng cách sử dụng api c (hoặc bất kỳ ngôn ngữ nào khác cho vấn đề đó)? Tôi cần thêm thông tin hơn là địa chỉ IP được cung cấp bởi gethostbyname(); cụ thể là dữ liệu liên quan đến SMTP.Tôi có thể thực hiện tra cứu DNS bằng cách sử dụng C/C++ trên Linux như thế nào?

+0

Khi bạn đề cập đến * liên quan đến smtp *, bạn có nghĩa là bản ghi MX cho tên miền không? – DaveR

+0

trùng lặp của http://stackoverflow.com/questions/1093410/pulling-mx-record-from-dns-server và một số otehrs – Alnitak

Trả lời

15

Nếu truy vấn chặn (đồng bộ) là ok, chỉ cần sử dụng res_query() và liên kết chương trình của bạn với -lresolv.

len = res_query(host, C_IN, T_MX, &answer, sizeof(answer)); 
0

Tôi không nghĩ rằng có một hàm trong thư viện chuẩn C cho điều này, nhưng nhiều ngôn ngữ kịch bản có chức năng này 'được tích hợp sẵn'. Ví dụ, Perl có Net::DNS gói:

use Net::DNS; 
my @mx = mx("example.com"); 
foreach $host (@mx) { 
    print $host; 
} 

Nếu bạn cần phải làm điều này trong C, một google nhanh chóng xuất hiện một vài thư viện C ra khỏi đó mà bạn có thể sử dụng:

1

Tôi muốn đề xuất FireDNS. Đó là một thư viện C rất nhanh cho tất cả các loại truy vấn dns.

+1

Dự án sẽ bị bỏ qua (bản phát hành cuối cùng năm 2004) và tiếc là liên kết tải xuống không hoạt động (http://www.firestuff.org/) ... – Destroyica

0

Và tôi sẽ thêm, trừ khi bạn đang viết thư chuyển tiếp, gần như chắc chắn bạn không nên tra cứu bản ghi MX - bạn nên chuyển thư đó đến một chuyển tiếp thư do người dùng định cấu hình thay thế.

1

Tôi thích adns vì nó cho phép cho các yêu cầu không đồng bộ

+1

ps, ​​tôi thích FireDns hơn, vì nó dễ dàng hơn và rõ ràng hơn nhiều: D – Finaldie

1

Tôi biết rằng câu hỏi là cũ, nhưng tôi từ lâu đã tìm kiếm một thư viện dns, và tất cả các câu trả lời ở đây chỉ cuống tôi. Tôi nghĩ rằng các thư viện như quảng cáo/udns đã viết không cho con người. Và FireDNS trong một thời gian dài đã không làm việc liên kết tải xuống.

Tôi đã tìm thấy poslib làm thư viện dns tốt nhất với giao diện rất dễ dàng.