1. DNS/実装/python/dnslib/README
について、ここに記述してください。
Python 3 support was added in Version 0.9.0 which represented a fairly major update to the library - the key changes include:
- Python 2.7/3.2+ support (the last version supporting Python 2.6
- or earlier was version 0.8.3)
- The 'Bimap' interface was changed significantly to explicitly
split forward (value->text) lookups via getitem and reverse (text->value) lookups via getattr. Applications using the old interface will need to be updated.
- Hostnames are now returned with a trailing dot by default (in
- line with RFC)
- Most object attributes are now typed in line with the record
- definitions to make it harder to generate invalid packets
- Support for encoding/decoding resource records in 'Zone' (BIND)
- file format
- Support for encoding/decoding packets in 'DiG' format
- Server framework allowing (in most cases) custom resolvers to
- be created by just subclassing the DNSResolver class and overriding the 'resolve' method
- A lot of fixes to error detection/handling which should make
- the library much more robust to invalid/unsupported data. The library should now either return a valid DNSRecord instance when parsing a packet or raise DNSError (tested via fuzzing)
- Improved utilities (dnslib.client, dnslib.proxy, dnslib.intercept)
- Improvements to encoding/decoding tests including the ability
- to generate test data automatically in test_decode.py (comparing outputs against DiG)
- Ability to compare and diff DNSRecords
1.1. Classes
The key DNS packet handling classes are in dnslib.dns and map to the standard DNS packet sections:
- DNSRecord - container for DNS packet. Contains:
- - DNSHeader - Question section containing zero or more DNSQuestion objects - Answer section containing zero or more RR objects - Authority section containing zero or more RR objects - Additional section containing zero or more RR objects
- DNS RRs (resource records) contain an RR header and an RD object)
- Specific RD types are implemented as subclasses of RD
- DNS labels are represented by a DNSLabel class - in most cases
- this handles conversion to/from textual representation however does support arbitatry labels via a tuple of bytes objects
1.2. Usage
The default text representation of the DNSRecord is in zone file format: