Class Dnsruby::ZoneTransfer
In: lib/Dnsruby/zone_transfer.rb
Parent: Object
Message Update ResolvError EncodeError OtherResolvError ServFail FormErr DecodeError NXRRSet YXDomain NotImp NXDomain VerifyError NotAuth YXRRSet NotZone Refused TsigError CodeMapper Types MetaTypes QTypes Nsec3HashAlgorithms Algorithms OpCode Classes ExtendedRCode Modes RCode Comparable Name RRSet TsigNotSignedResponseError Resolver SingleResolver StandardError TimeoutError ResolvTimeout DNS Dnssec Hosts RR\n[lib/Dnsruby/resource/A.rb\nlib/Dnsruby/resource/AAAA.rb\nlib/Dnsruby/resource/AFSDB.rb\nlib/Dnsruby/resource/CERT.rb\nlib/Dnsruby/resource/DHCID.rb\nlib/Dnsruby/resource/DLV.rb\nlib/Dnsruby/resource/DNSKEY.rb\nlib/Dnsruby/resource/DS.rb\nlib/Dnsruby/resource/HINFO.rb\nlib/Dnsruby/resource/HIP.rb\nlib/Dnsruby/resource/IN.rb\nlib/Dnsruby/resource/IPSECKEY.rb\nlib/Dnsruby/resource/ISDN.rb\nlib/Dnsruby/resource/KX.rb\nlib/Dnsruby/resource/LOC.rb\nlib/Dnsruby/resource/MINFO.rb\nlib/Dnsruby/resource/MX.rb\nlib/Dnsruby/resource/NAPTR.rb\nlib/Dnsruby/resource/NSAP.rb\nlib/Dnsruby/resource/NSEC.rb\nlib/Dnsruby/resource/NSEC3.rb\nlib/Dnsruby/resource/NSEC3PARAM.rb\nlib/Dnsruby/resource/OPT.rb\nlib/Dnsruby/resource/PX.rb\nlib/Dnsruby/resource/RP.rb\nlib/Dnsruby/resource/RRSIG.rb\nlib/Dnsruby/resource/RT.rb\nlib/Dnsruby/resource/SOA.rb\nlib/Dnsruby/resource/SPF.rb\nlib/Dnsruby/resource/SRV.rb\nlib/Dnsruby/resource/SSHFP.rb\nlib/Dnsruby/resource/TKEY.rb\nlib/Dnsruby/resource/TSIG.rb\nlib/Dnsruby/resource/TXT.rb\nlib/Dnsruby/resource/X25.rb\nlib/Dnsruby/resource/domain_name.rb\nlib/Dnsruby/resource/generic.rb\nlib/Dnsruby/resource/resource.rb] Recursor IPv6 IPv4 ZoneTransfer MessageDecoder MessageEncoder Question Header TheLog ValidatorThread PacketSender ResolverRuby Config KeyCache Cache SingleVerifier SelectThread Resolv ZoneReader lib/Dnsruby/DNS.rb lib/Dnsruby/dnssec.rb lib/Dnsruby/Hosts.rb lib/Dnsruby/resource/generic.rb lib/Dnsruby/Recursor.rb lib/Dnsruby/update.rb lib/Dnsruby/ipv6.rb lib/Dnsruby/ipv4.rb lib/Dnsruby/code_mapper.rb lib/Dnsruby/zone_transfer.rb lib/Dnsruby/message.rb lib/Dnsruby/TheLog.rb lib/Dnsruby/resource/resource.rb lib/Dnsruby/validator_thread.rb lib/Dnsruby/PacketSender.rb lib/Dnsruby/Resolver.rb lib/Dnsruby/Config.rb lib/Dnsruby/key_cache.rb lib/Dnsruby/Cache.rb lib/Dnsruby/single_verifier.rb lib/Dnsruby/SingleResolver.rb lib/Dnsruby/select_thread.rb lib/Dnsruby/name.rb lib/dnsruby.rb lib/Dnsruby/resource/TKEY.rb lib/Dnsruby/zone_reader.rb Dnsruby dot/m_61_0.png

This class performs zone transfers as per RFC1034 (AXFR) and RFC1995 (IXFR).

Methods

new   transfer   tsig=  

Classes and Modules

Class Dnsruby::ZoneTransfer::Delta

Attributes

klass  [RW]  The class - defaults to IN
last_tsigstate  [R]  Returns the tsigstate of the last transfer (nil if no TSIG signed transfer has occurred)
port  [RW]  The port to connect to - defaults to 53
serial  [RW]  If using IXFR, this is the SOA serial number to start the incrementals from
server  [RW]  The nameserver to use for the zone transfer - defaults to system config
transfer_type  [RW]  What type of transfer to do (IXFR or AXFR) - defaults to AXFR
tsig  [R]  The TSIG record used to sign the transfer

Public Class methods

[Source]

    # File lib/Dnsruby/zone_transfer.rb, line 46
46:     def initialize
47:       @server=Config.new.nameserver[0]
48:       @transfer_type = Types.AXFR
49:       @klass=Classes.IN
50:       @port=53
51:       @serial=0
52:       @tsig = nil
53:       @axfr = nil
54:     end

Public Instance methods

Perform a zone transfer (RFC1995) If an IXFR query is unsuccessful, then AXFR is tried (and @transfer_type is set to AXFR) TCP is used as the only transport

If AXFR is performed, then the zone will be returned as a set of records :

      zt = Dnsruby::ZoneTransfer.new
      zt.transfer_type = Dnsruby::Types.AXFR
      zt.server = "ns0.validation-test-servers.nominet.org.uk"
      zone = zt.transfer("validation-test-servers.nominet.org.uk")
      soa = zone[0]
      rec1 = zone[1]
      print zone.to_s

If IXFR is performed, then the incrementals will be returned as a set of Deltas. Each Delta contains the start and end SOA serial number, as well as an array of adds and deletes that occurred between the start and end.

       zt = Dnsruby::ZoneTransfer.new
       zt.transfer_type = Dnsruby::Types.IXFR
       zt.server = "ns0.validation-test-servers.nominet.org.uk"
       zt.serial = 2007090401
       deltas = zt.transfer("validation-test-servers.nominet.org.uk")
       assert_equal("Should show up in transfer", deltas[0].adds[1].data)

[Source]

     # File lib/Dnsruby/zone_transfer.rb, line 82
 82:     def transfer(zone)      
 83:       servers = @server
 84:       if (servers.class == String)
 85:         servers=[servers]
 86:       end
 87:       xfr = nil
 88:       exception = nil
 89:       servers.each do |server|
 90:         begin
 91:           server=Config.resolve_server(server)
 92:           xfr = do_transfer(zone, server)
 93:           break
 94:         rescue Exception => exception
 95:         end
 96:       end
 97:       if (xfr == nil && exception != nil)
 98:         raise exception
 99:       end
100:       return xfr
101:     end

Sets the TSIG to sign the zone transfer with. Pass in either a Dnsruby::RR::TSIG, or a key_name and key (or just a key) Pass in nil to stop tsig signing.

  • res.tsig=(tsig_rr)
  • res.tsig=(key_name, key)
  • res.tsig=nil # Don‘t sign the transfer

[Source]

    # File lib/Dnsruby/zone_transfer.rb, line 41
41:     def tsig=(*args)
42:       @tsig = SingleResolver.get_tsig(args)
43:     end

[Validate]