DNS
djbdns
#include <djbdns/dns.h> void dns_random_init(const char seed[128]); int dns_ip4(stralloc *out, const stralloc *fqdn); int dns_name4(stralloc *out, const char ip[4]); int dns_mx(stralloc *out, const stralloc *fqdn);
djbdnsに含まれているライブラリです。Debianならlibdjbdns1-devというパッケージになっています。
このライブラリでは、文字列の受け渡しにstrallocという構造体を使います。strallocの使い方については、strallocの項を御覧下さい。
void dns_random_init(const char seed[128]);
乱数生成機を初期化します。パケット盗聴から守るために必要です。
int dns_ip4(stralloc *out, const stralloc *fqdn);
fqdnに対応するIPアドレスをoutに格納します。各IPアドレスは4バイトのデータになっており、繋がった状態で格納されます。
成功すると0、失敗すると-1を返します。
int dns_name4(stralloc *out, const char ip[4]);
ipで渡されたIPアドレスに対応するホスト名をoutに格納します。
成功すると0、失敗すると-1を返します。
int dns_mx(stralloc *out, const stralloc *fqdn);
fqdnのMXレコードをoutに格納します。格納される形式は次のようになります。
優先度(2byte) + ホスト名 + \0 + 優先度(2byte) + ホスト名 + \0 + ...
成功すると0、失敗すると-1を返します。
使い方
#include <djbdns/dns.h> #include <stdio.h> void print_ips(unsigned char *ips,unsigned int len); int main() { char seed[128]; stralloc domain={0},ips={0}; dns_random_init(seed); stralloc_copys(&domain,"gmail.com"); dns_ip4(&ips,&domain); print_ips((unsigned char*)ips.s,ips.len); return 0; } void print_ips(unsigned char *ips,unsigned int len) { int i; for (i=0;i<len;i+=4) { printf("%u.%u.%u.%u\n",ips[i],ips[i+1],ips[i+2],ips[i+3]); } }
実行結果
「gmail.com」のIPアドレス(IPアドレスは変わる可能性があります)
74.125.127.83 209.85.225.83 74.125.79.83
「209.191.93.53」のホスト名を得る
#include <djbdns/dns.h> #include <stdio.h> int main() { char ip[4]={209,191,93,53},seed[128]; stralloc domain={0}; dns_random_init(seed); dns_name4(&domain,ip); stralloc_append(&domain,""); printf("%s\n",domain.s); return 0; }
実行結果
「209.191.93.53」のホスト名(ホスト名は変わる可能性があります)
b1.www.vip.mud.yahoo.com
「gmail.com」のMXレコードを得る
#include <djbdns/dns.h> #include <stdio.h> int main() { char seed[128]; int i; stralloc domain={0},mxs={0}; dns_random_init(seed); stralloc_copys(&domain,"gmail.com"); dns_mx(&mxs,&domain); for (i=0;i<mxs.len;i++) { unsigned int mx; mx=(unsigned char)mxs.s[i++]; mx<<=8; mx+=(unsigned char)mxs.s[i++]; printf("%u ",mx); for (;mxs.s[i]!='\0';i++) putchar(mxs.s[i]); putchar('\n'); } return 0; }
実行結果
「gmail.com」のMXレコード(MXレコードは変わる可能性があります)
5 gmail-smtp-in.l.google.com 20 alt2.gmail-smtp-in.l.google.com 30 alt3.gmail-smtp-in.l.google.com 10 alt1.gmail-smtp-in.l.google.com 40 alt4.gmail-smtp-in.l.google.com