Есть ли какая-либо функция в C на linux, с помощью которой мы можем запросить запись MX (например, gethostbyname).?Запрос записи MX в C linux
ответ
Ссылка на -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;
}
Нужна ли нам какая-то внешняя библиотека для запуска этой программы? – avd
Как я уже упоминал: для этого нужен 'libresolv', который первоначально происходит из проекта BIND (но glibc имеет копию). – ephemient
Как установить эту библиотеку? Не можем ли мы выполнить MX-запрос без какой-либо внешней библиотеки? – avd
Я просто хочу добавить к вышеуказанному ответу. Я получал ошибки компиляции. После поиска я получил один форум о том, как скомпилировать. Первое использование основной функции, как (для скажем 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
но вышеуказанные параметры не работают – avd
Вам не нужно указывать путь к библиотеке. Проблема, которую вы, вероятно, видите, связана с тем, что после '-lresolv' связаны библиотеки, для которых нет статических версий. Поэтому вы можете сделать это вместо: '-Wl, -Bstatic -lresolv -Wl, -Bdynamic' или более лаконично:' -статический -lresolv -dynamic'. – jxh
- 1. Поиск записи MX с использованием C#?
- 2. Записи Google App MX
- 3. Динамические записи MX
- 4. Отдельные записи MX для поддомена
- 5. Записи Google MX и Zoho MX для одного домена
- 6. Получить записи DNS MX в узле
- 7. Запрос поиска MX для разрешения всех поддоменов
- 8. Linux C USB скорость записи
- 9. Ошибка DNS после настройки записи mx
- 10. Блокировка огневой стены при проверке записи mx
- 11. Невозможно добавить записи MX из plesk
- 12. C#: получить запись CNAME & MX из домена?
- 13. Понимание записей MX с C#
- 14. Функция записи в Linux
- 15. Записи TNS в Linux
- 16. Запрос памяти в Linux
- 17. Linux, C: Соединитель IPv6: записи блоков
- 18. Do MX Records вмешиваются в подстановочные записи CNAME?
- 19. Определение имени хоста/IP-адреса из записи MX в PHP
- 20. Как пересылать электронную почту с использованием записи MX в DNS
- 21. Как найти mx-записи в ядре с точечной сетью?
- 22. Преимущество использования mx: Текст над mx: Ярлык
- 23. Получение mx: значения CheckBox изнутри mx: Repeater
- 24. mx: Обтекание текстом внутри mx: Список
- 25. Flex: MX + Sparks против компонентов MX
- 26. Flex mx: DataGrid | mx: appliaction | search cell
- 27. MX-record email dns
- 28. Mx запись для субдомена
- 29. Найти записи пути в linux
- 30. Драйвер устройства записи в Linux
Это копия дубликата. – 2009-11-06 15:53:49
PLease не удаляет это. Другие сообщения не имеют полных ответов. Это полностью устраняет проблему. – avd