Ars Longa, Vita Brevis

May 6, 2008

Наш ответ libresolv

Рубрика: C/C++, Linux
Tags: ,
Vladimir @ 05: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" (4) »

  1. [July 17, 2008 14:59] соня:

    Libres & Olveys- что- то до боли знакомое…

    #1
  2. [July 17, 2008 15:04] Vladimir:

    Ну кому что…

    #2
  3. [July 17, 2008 19:31] SaltyDog:

    улыбнул первый коммент :)

    #3
  4. [July 28, 2008 15:41] Алексей:

    API-функций это очень перспективное направление. Тоже хочу освоить.

    #4

RSS feed for comments on this post. TrackBack URL

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

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

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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

Subscribe without commenting