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