Make upstream DNS server configurable

This commit is contained in:
bcoles
2014-03-04 00:56:41 +10:30
parent c11d4d40ea
commit 3494542b54
3 changed files with 46 additions and 1 deletions

View File

@@ -33,6 +33,28 @@ module BeEF
dns.run_server(address, port)
print_info "DNS Server: #{address}:#{port}"
servers = []
unless dns_config['upstream'].nil?
dns_config['upstream'].each do |server|
if server[1].nil? or server[2].nil?
next
end
if server[0] == 'tcp'
servers << ['tcp', server[1], server[2]]
elsif server[0] == 'udp'
servers << ['udp', server[1], server[2]]
end
end
end
if servers.empty?
servers << ['tcp', '8.8.8.8', 53]
servers << ['udp', '8.8.8.8', 53]
end
upstream_servers = ''
servers.each do |server|
upstream_servers << "Upstream server: #{server[1]}:#{server[2]} (#{server[0]})\n"
end
print_more upstream_servers
end
# Mounts handler for processing RESTful API calls

View File

@@ -11,3 +11,5 @@ beef:
authors: ['soh_cah_toa']
address: '127.0.0.1'
port: 5300
upstream:
[['tcp', '8.8.8.8', 53], ['udp', '8.8.8.8', 53]]

View File

@@ -136,9 +136,30 @@ module BeEF
BeEF::Extension::Dns::Server.instance.instance_eval { @server = server }
# Pass unmatched queries upstream to root nameservers
server = []
dns_config = BeEF::Core::Configuration.instance.get('beef.extension.dns')
unless dns_config['upstream'].nil?
dns_config['upstream'].each do |server|
if server[1].nil? or server[2].nil?
print_error "Invalid server '#{server[1]}:#{server[2]}' specified for upstream DNS server."
next
elsif server[0] == 'tcp'
servers << [:tcp, server[1], server[2]]
elsif server[0] == 'udp'
servers << [:udp, server[1], server[2]]
else
print_error "Invalid protocol '#{server[0]}' specified for upstream DNS server."
end
end
end
if servers.empty?
print_debug "No upstream DNS servers specified. Using '8.8.8.8'"
servers << [:tcp, '8.8.8.8', 53]
servers << [:udp, '8.8.8.8', 53]
end
otherwise do |transaction|
transaction.passthrough!(
RubyDNS::Resolver.new([[:udp, '8.8.8.8', 53], [:tcp, '8.8.8.8', 53]])
RubyDNS::Resolver.new servers
)
end
end