## page was renamed from DNS/実装/python/dnslib/usage == DNS/実装/python/dnslib/usage == === RR (list) === いわゆるゾーン形式のテキストを読み込んで、dnslib.RRタイプのリストに変換できる。 It is also possible to create RRs from a string in zone file format {{{ >>> RR.fromZone("abc.com IN A 1.2.3.4") [] }}} (Note: this produces a list of RRs which should be unpacked if being passed to add_answer/add_auth/add_ar etc) {{{ >>> q = DNSRecord.question("abc.com") >>> a = q.reply() >>> a.add_answer(*RR.fromZone("abc.com 60 A 1.2.3.4")) >>> print(a) ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ... ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;abc.com. IN A ;; ANSWER SECTION: abc.com. 60 IN A 1.2.3.4 }}} === RR from zone file === The zone file can contain multiple entries and supports most of the normal format defined in RFC1035 (specifically not $INCLUDE) {{{ >>> z = ''' ... $TTL 300 ... $ORIGIN abc.com ... ... @ IN MX 10 mail.abc.com. ... www IN A 1.2.3.4 ... IN TXT "Some Text" ... mail IN CNAME www.abc.com. ... ''' >>> for rr in RR.fromZone(textwrap.dedent(z)): ... print(rr) abc.com. 300 IN MX 10 mail.abc.com. www.abc.com. 300 IN A 1.2.3.4 www.abc.com. 300 IN TXT "Some Text" mail.abc.com. 300 IN CNAME www.abc.com. }}} === reply from zone file (string) === It is also possible to create a reply from a string in zone file format: {{{ >>> q = DNSRecord(q=DNSQuestion("abc.com",QTYPE.ANY)) >>> a = q.replyZone("abc.com 60 IN CNAME xxx.abc.com") >>> print(a) ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ... ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;abc.com. IN ANY ;; ANSWER SECTION: abc.com. 60 IN CNAME xxx.abc.com. }}}