Ars Longa, Vita Brevis

Май 6, 2008

Наш ответ libresolv

Рубрика: C/C++, Linux
Метки: ,
Vladimir @ 5:36 дп
RSS 2.0

Объектно-ориентированная реализация DNS Lookup на C++

Недавно мне пришлось заняться изучением интерфейса библиотеки libresolv, отвечающей за формирование DNS-запросов и получение и разбор ответов (хотя разбор — это громко сказано). Так получилось, что нормальной внятной документации по API-функциям с примерами использования я найти не смог (может, я не там искал). И хотя код — лучшая документация, окончательно разобраться с форматом возвращаемых данных я смог только после изучения RFC, посвященных DNS.

В результате трёхдневного изучения у меня родилась небольшая библиотека, являющаяся интерфейсом к libresolv, написанная с использованием объектно-ориентированного подхода. Большой упор делался на безопасность. Библиотека пока еще в бета-версии (нет поддержки IPv6, нет интерфейса для изменения флагов запроса, разбираются только записи A, CNAME, MX, NS, NULL, PTR, SOA, SPF, SRV, TXT), но очень легко расширяется. Возможно, кому-нибудь пригодится…

Пример использования:

[-]
View Code C++
#include <iostream>
#include "sj_dns.h"
 
int main(int argc, char** argv)
{
    DnsQuery q;
 
    //q.setNameserver("127.0.0.1", 53);
    ::std::auto_ptr<DnsResponse> r(q.query("sjinks.org.ua", DnsQuestion::cl_in, DnsQuestion::rr_wild));
 
    if (0 != r.get()) {
        ::std::cout << *(r.get());
    }
 
    return 0;
}

Результат:

vladimir@SJINKS:~/test/FCrDNS$ g++ *.cpp -o test -lresolv -Wall -O3 && ./test
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16821
;; flags: rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 9, ADDITIONAL: 10

;; QUESTION SECTION:
;sjinks.org.ua  IN      ANY

;; ANSWER SECTION:
sjinks.org.ua   54149   IN      SPF     "v=spf1 a mx:sjinks.org.ua -all"
sjinks.org.ua   54149   IN      TXT     "v=spf1 a mx:sjinks.org.ua -all"
sjinks.org.ua   54149   IN      MX      10 sjinks.org.ua
sjinks.org.ua   54149   IN      SOA     ns1.sjinks.org.ua sjinks.sjinks.org.ua 2008042900 86400 15 54432000 15
sjinks.org.ua   50662   IN      A       195.10.218.132
sjinks.org.ua   54149   IN      NS      ns.secondary.net.ua
sjinks.org.ua   54149   IN      NS      ns0.xname.org
sjinks.org.ua   54149   IN      NS      ns1.xname.org
sjinks.org.ua   54149   IN      NS      ns1.sjinks.org.ua
sjinks.org.ua   54149   IN      NS      NS1.EVERYDNS.net
sjinks.org.ua   54149   IN      NS      ns2.trifle.net
sjinks.org.ua   54149   IN      NS      NS2.EVERYDNS.net
sjinks.org.ua   54149   IN      NS      NS3.EVERYDNS.net
sjinks.org.ua   54149   IN      NS      NS4.EVERYDNS.net

;; AUTHORITY SECTION:
sjinks.org.ua   54149   IN      NS      NS4.EVERYDNS.net
sjinks.org.ua   54149   IN      NS      ns.secondary.net.ua
sjinks.org.ua   54149   IN      NS      ns0.xname.org
sjinks.org.ua   54149   IN      NS      ns1.xname.org
sjinks.org.ua   54149   IN      NS      ns1.sjinks.org.ua
sjinks.org.ua   54149   IN      NS      NS1.EVERYDNS.net
sjinks.org.ua   54149   IN      NS      ns2.trifle.net
sjinks.org.ua   54149   IN      NS      NS2.EVERYDNS.net
sjinks.org.ua   54149   IN      NS      NS3.EVERYDNS.net

;; ADDITIONAL SECTION:
sjinks.org.ua   50662   IN      A       195.10.218.132
ns.secondary.net.ua     20692   IN      A       195.149.112.1
ns0.xname.org   29640   IN      A       195.234.42.1
ns1.xname.org   30415   IN      A       87.98.164.164
ns1.sjinks.org.ua       53539   IN      A       195.10.218.132
NS1.EVERYDNS.net        41867   IN      A       208.76.56.56
ns2.trifle.net  74710   IN      A       195.24.128.164
NS2.EVERYDNS.net        129350  IN      A       204.152.184.150
NS3.EVERYDNS.net        32542   IN      A       208.96.6.134
NS4.EVERYDNS.net        2226    IN      A       64.158.219.3

Скачать библиотеку SJDNS

Комментарии к статье "Наш ответ libresolv" »

К статье "Наш ответ libresolv" комментариев нет. Может быть, Вы хотите прокомментировать статью?

RSS лента комментариев к этой записи. TrackBack URL

Оставить комментарий к записи "Наш ответ libresolv"

Изображения должны быть включены!

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя