DNS Enumeration
The main usage is
require 'net/dns'
resolver = Net::DNS::Resolver.start("google.com")
Returns
;; Answer received from 127.0.1.1:53 (260 bytes)
;;
;; HEADER SECTION
;; id = 36568
;; qr = 1 opCode: QUERY aa = 0 tc = 0 rd = 1
;; ra = 1 ad = 0 cd = 0 rcode = NoError
;; qdCount = 1 anCount = 6 nsCount = 4 arCount = 4
;; QUESTION SECTION (1 record):
;; google.com. IN A
;; ANSWER SECTION (6 records):
google.com. 31 IN A 64.233.183.102
google.com. 31 IN A 64.233.183.113
google.com. 31 IN A 64.233.183.100
google.com. 31 IN A 64.233.183.139
google.com. 31 IN A 64.233.183.138
google.com. 152198 IN NS ns1.google.com.
google.com. 152198 IN NS ns3.google.com.
google.com. 152198 IN NS ns4.google.com.
google.com. 152198 IN NS ns2.google.com.
;; ADDITIONAL SECTION (4 records):
ns3.google.com. 152198 IN A 216.239.36.10
ns4.google.com. 152198 IN A 216.239.38.10
ns2.google.com. 152198 IN A 216.239.34.10
ns1.google.com. 345090 IN A 216.239.32.10
As you can see from response above, there are 5 sections
- Header section: DNS lookup headers
- Question section: DNS question,
- Answer section: Array of the exact lookup answer (base on lookup type. ex. A, NS, MX , etc)
- Authority section: Array of authority nameserver
- Additional section: Array array of nameserver lookup
resolver.header
resolver.question
resolver.answer
resolver.authority
resolver.additional
A record
Because the A record is the default, we can do like above example
or in one line to get exact answer
.
resolver = Net::DNS::Resolver.start("google.com").answer
will return an array with all IPs assigned to this domain
google.com. 34 IN A 74.125.239.39,
google.com. 34 IN A 74.125.239.33,
google.com. 34 IN A 74.125.239.34,
google.com. 34 IN A 74.125.239.32,
google.com. 34 IN A 74.125.239.46,
google.com. 34 IN A 74.125.239.40,
google.com. 34 IN A 74.125.239.38,
google.com. 34 IN A 74.125.239.37,
google.com. 34 IN A 74.125.239.41]
mx = Net::DNS::Resolver.start("google.com", Net::DNS::MX).answer
[google.com. 212 IN MX 40 alt3.aspmx.l.google.com.,
google.com. 212 IN MX 30 alt2.aspmx.l.google.com.,
google.com. 212 IN MX 20 alt1.aspmx.l.google.com.,
google.com. 212 IN MX 50 alt4.aspmx.l.google.com.,
google.com. 212 IN MX 10 aspmx.l.google.com.]
returns
[facebook.com. 385 IN A 173.252.120.6,
facebook.com. 85364 IN TXT ,
facebook.com. 149133 IN NS b.ns.facebook.com.,
facebook.com. 149133 IN NS a.ns.facebook.com.]
for list of types, please refer to the
resolver = Net::DNS::Resolver.new
query = resolver.query("69.171.239.12", Net::DNS::PTR)
If you want to specify the nameserver(s) to use, it support an array of nameserver
resolver = Net::DNS::Resolver.new(:nameserver => "8.8.8.8")
resolver = Net::DNS::Resolver.new