Có chức năng nào trong C trên linux mà chúng tôi có thể truy vấn bản ghi MX (như gethostbyname).?Truy vấn bản ghi MX trong C linux
Trả lời
Liên kết với -lresolv
(BIND's libresolv
).
#include <arpa/inet.h>
#include <resolv.h>
#include <string.h>
int resolvmx(const char *name, char **mxs, int limit) {
unsigned char response[NS_PACKETSZ]; /* big enough, right? */
ns_msg handle;
ns_rr rr;
int mx_index, ns_index, len;
char dispbuf[4096];
if ((len = res_search(name, C_IN, T_MX, response, sizeof(response))) < 0) {
/* WARN: res_search failed */
return -1;
}
if (ns_initparse(response, len, &handle) < 0) {
/* WARN: ns_initparse failed */
return 0;
}
len = ns_msg_count(handle, ns_s_an);
if (len < 0)
return 0;
for (mx_index = 0, ns_index = 0;
mx_index < limit && ns_index < len;
ns_index++) {
if (ns_parserr(&handle, ns_s_an, ns_index, &rr)) {
/* WARN: ns_parserr failed */
continue;
}
ns_sprintrr (&handle, &rr, NULL, NULL, dispbuf, sizeof (dispbuf));
if (ns_rr_class(rr) == ns_c_in && ns_rr_type(rr) == ns_t_mx) {
char mxname[MAXDNAME];
dn_expand(ns_msg_base(handle), ns_msg_base(handle) + ns_msg_size(handle), ns_rr_rdata(rr) + NS_INT16SZ, mxname, sizeof(mxname));
mxs[mx_index++] = strdup(mxname);
}
}
return mx_index;
}
Chúng ta có cần một số thư viện bên ngoài để chạy chương trình này không? – avd
Như tôi đã đề cập: điều này cần 'libresolv', mà ban đầu xuất phát từ dự án BIND (nhưng glibc có một bản sao). – ephemient
Cách cài đặt thư viện này? Không, chúng tôi có thể truy vấn MX mà không có bất kỳ thư viện bên ngoài nào không? – avd
Tôi chỉ muốn thêm vào câu trả lời ở trên. Tôi đã nhận được lỗi biên dịch. Sau khi tìm kiếm, tôi đã có một diễn đàn về cách biên dịch. Đầu tiên sử dụng chức năng chính như (đối với tiếng nói gmail.com)
main(){
char *mxs[10];
int a;
printf("%d\n",a=resolvmx("gmail.com",mxs,10));
printf("%s\n",mxs[a-1]);
}
và sau đó biên dịch nó như
gcc <pname.c> /usr/lib/libresolv.a (instead of gcc pname.c -lresolv)
Nếu bạn đang thiếu '/ usr/lib/libresolv.so', bạn vẫn nên sử dụng' -Wl, -Bstatic -lresolv' thay vì trỏ trực tiếp đến 'libresolv.a'. – ephemient
nhưng Các tùy chọn trên không hoạt động – avd
Bạn không phải chỉ định đường dẫn đến thư viện. Vấn đề bạn có thể thấy là có các thư viện được liên kết sau '-lresolv' mà không có sẵn các phiên bản tĩnh. Vì vậy, bạn có thể làm điều này thay vào đó: '-Wl, -Bstatic -lresolv -Wl, -Bdynamic', hoặc ngắn gọn hơn:' -static -lresolv -dynamic'. – jxh
- 1. Trên Linux, làm cách nào để giả mạo bản ghi MX cho tên miền?
- 2. Truy vấn ghi nhật ký truy vấn chậm của MySQL ghi nhật ký truy vấn nhanh
- 3. Làm cách nào để xác thực bản ghi MX cho tên miền trong python?
- 4. linux clipboard đọc/ghi trong C
- 5. Cách ghi tệp bằng C trong Linux?
- 6. Truy vấn Hibernate cho cùng một bản ghi nhiều lần
- 7. truy vấn sql để tìm các bản ghi trùng lặp
- 8. C# LINQ truy vấn (MYSQL EF) - Bản ghi riêng biệt và mới nhất
- 9. Hàm PHP mail() có hoạt động không nếu tôi không sở hữu bản ghi MX
- 10. Truy vấn WMI trong C?
- 11. Cách chọn bản ghi nếu truy vấn trả về một hàng hoặc chọn không có bản ghi nếu truy vấn trả về nhiều hàng hơn
- 12. trả lại tất cả các bản ghi trong một truy vấn trong tìm kiếm đàn hồi
- 13. Tạo truy vấn SQL để truy xuất các bản ghi gần đây nhất
- 14. Ghi đè truy vấn phương tiện CSS
- 15. Truy vấn Oracle SQL ghi nhật ký
- 16. Không bản sao trong truy vấn SQL
- 17. Cách tốt nhất để xóa nhiều bản ghi trong truy vấn LINQ?
- 18. Truy vấn qua lại máy chủ SQL làm cơ sở cho bản ghi DAO trong Access
- 19. Nhận trung bình tối đa cho mỗi bản ghi riêng biệt trong Truy vấn SQL
- 20. Truy vấn con MySQL - Chỉ tìm bản ghi đầu tiên trong LEFT JOIN
- 21. Một truy vấn trả về 5 triệu bản ghi trong bao lâu?
- 22. truy vấn trong đó ngày = Date.today có Rails, MySQL và Bản ghi Hoạt động
- 23. Hạn chế trả về bản ghi từ truy vấn SQL trong Oracle
- 24. Truy cập cột mảng bản ghi NumPy trong Cython
- 25. Chuỗi truy vấn trong lệnh SQL C#
- 26. tạo truy vấn sql trong C++/java?
- 27. Oracle: Một cách thanh lịch để lấy bản ghi đầu tiên (truy vấn hàng đầu)
- 28. Công cụ truy vấn SQL cho các tệp văn bản trên Linux?
- 29. C++ Truy cập vào SQL Server từ Linux
- 30. C++ vấn đề ghi đè/quá tải
Đây là một bản sao của một bản sao. –
Xin đừng xóa cái này. Bài đăng khác không có câu trả lời hoàn chỉnh. Điều này hoàn toàn khắc phục vấn đề. – avd