C上有什麼函數可以用來查詢MX記錄(比如gethostbyname)。在C中查詢MX記錄linux
回答
鏈接-lresolv
(BIND的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;
}
我只是想補充上面的答案。我收到編譯錯誤。搜索後,我在一個論壇上討論如何編譯。首次使用主要功能(比如用於gmail.com)
main(){
char *mxs[10];
int a;
printf("%d\n",a=resolvmx("gmail.com",mxs,10));
printf("%s\n",mxs[a-1]);
}
,然後編譯爲
gcc <pname.c> /usr/lib/libresolv.a (instead of gcc pname.c -lresolv)
如果你缺少'/ usr/lib/libresolv.so',你應該仍然使用'-Wl,-Bstatic -lresolv'而不是直接指向'libresolv.a'。 – ephemient 2009-11-06 19:55:41
但上述選項不起作用 – avd 2009-11-08 05:07:23
您不必指定庫的路徑。你可能看到的問題是,在'-lresolv'之後有一些庫沒有可用的靜態版本。所以你可以這樣做:'-Wl,-Bstatic -lresolv -Wl,-Bdynamic',或者更簡潔:'-static -lresolv -dynamic'。 – jxh 2013-09-12 21:39:06
- 1. MX記錄查詢失敗
- 2. 使用C#查找MX記錄?
- 3. 在C程序中獲取MX記錄
- 4. 用C#瞭解MX記錄
- 5. Android DNS MX記錄查找
- 6. MX記錄查找和檢查
- 7. 動態MX記錄
- 8. A-和MX記錄
- 9. MX記錄混淆
- 10. 如何查詢服務器,並獲得MX,A,NS記錄
- 11. 在Linux上,如何僞造域的MX記錄?
- 12. c查詢txt記錄
- 13. MX記錄變化爲Fastmail
- 14. MX記錄和Amazon S3
- 15. MX記錄的子域
- 16. 配置CNAME和MX記錄
- 17. 如何在dot net core中查找mx記錄?
- 18. 查詢C中的激活記錄
- 19. 查詢記錄
- 20. 查詢查詢記錄
- 21. 在活動記錄查詢
- 22. 取記錄在像查詢
- 23. 從一個查詢中獲取結果並將其放入另一個查詢(搜索mx記錄)
- 24. 單個域的Google MX和Zoho MX記錄
- 25. 查詢擺脫匹配記錄C#
- 26. 記錄mysql查詢
- 27. 查詢的記錄
- 28. 在MySql中查詢的歷史記錄
- 29. 在子查詢中計數記錄
- 30. 在Postgres中只記錄用戶查詢
這是一個重複的副本。 – 2009-11-06 15:53:49
PLease不要刪除這個。其他文章沒有完整的答案。這完全解決了這個問題。 – avd 2009-11-06 19:21:13