1+ # -*- coding:binary -*-
2+ require 'spec_helper'
3+ require 'net/dns'
4+
5+
6+ RSpec . describe Rex ::Proto ::DNS ::CustomNameserverProvider do
7+ def packet_for ( name )
8+ packet = Net ::DNS ::Packet . new ( name , Net ::DNS ::A , Net ::DNS ::IN )
9+ Rex ::Proto ::DNS ::Packet . encode_drb ( packet )
10+ end
11+
12+ let ( :base_nameserver ) do
13+ '1.2.3.4'
14+ end
15+
16+ let ( :ruleless_nameserver ) do
17+ '1.2.3.5'
18+ end
19+
20+ let ( :ruled_nameserver ) do
21+ '1.2.3.6'
22+ end
23+
24+ let ( :ruled_nameserver2 ) do
25+ '1.2.3.7'
26+ end
27+
28+ let ( :ruled_nameserver3 ) do
29+ '1.2.3.8'
30+ end
31+
32+ let ( :config ) do
33+ { :dns_cache_no_start => true }
34+ end
35+
36+ subject ( :many_ruled_provider ) do
37+ dns_resolver = Rex ::Proto ::DNS ::CachedResolver . new ( config )
38+ dns_resolver . extend ( Rex ::Proto ::DNS ::CustomNameserverProvider )
39+ dns_resolver . nameservers = [ base_nameserver ]
40+ dns_resolver . add_nameserver ( [ ] , ruleless_nameserver , nil )
41+ dns_resolver . add_nameserver ( [ '*.metasploit.com' ] , ruled_nameserver , nil )
42+ dns_resolver . add_nameserver ( [ '*.metasploit.com' ] , ruled_nameserver2 , nil )
43+ dns_resolver . add_nameserver ( [ '*.notmetasploit.com' ] , ruled_nameserver3 , nil )
44+
45+ dns_resolver
46+ end
47+
48+ subject ( :ruled_provider ) do
49+ dns_resolver = Rex ::Proto ::DNS ::CachedResolver . new ( config )
50+ dns_resolver . extend ( Rex ::Proto ::DNS ::CustomNameserverProvider )
51+ dns_resolver . nameservers = [ base_nameserver ]
52+ dns_resolver . add_nameserver ( [ ] , ruleless_nameserver , nil )
53+ dns_resolver . add_nameserver ( [ '*.metasploit.com' ] , ruled_nameserver , nil )
54+
55+ dns_resolver
56+ end
57+
58+ subject ( :ruleless_provider ) do
59+ dns_resolver = Rex ::Proto ::DNS ::CachedResolver . new ( config )
60+ dns_resolver . extend ( Rex ::Proto ::DNS ::CustomNameserverProvider )
61+ dns_resolver . nameservers = [ base_nameserver ]
62+ dns_resolver . add_nameserver ( [ ] , ruleless_nameserver , nil )
63+
64+ dns_resolver
65+ end
66+
67+ subject ( :empty_provider ) do
68+ dns_resolver = Rex ::Proto ::DNS ::CachedResolver . new ( config )
69+ dns_resolver . extend ( Rex ::Proto ::DNS ::CustomNameserverProvider )
70+ dns_resolver . nameservers = [ base_nameserver ]
71+
72+ dns_resolver
73+ end
74+
75+ context 'When no nameserver is configured' do
76+ it 'The resolver base is returned' do
77+ packet = packet_for ( 'subdomain.metasploit.com' )
78+ ns = empty_provider . nameservers_for_packet ( packet )
79+ expect ( ns ) . to eq ( [ [ base_nameserver , { } ] ] )
80+ end
81+ end
82+
83+ context 'When a base nameserver is configured' do
84+ it 'The base nameserver is returned' do
85+ packet = packet_for ( 'subdomain.metasploit.com' )
86+ ns = ruleless_provider . nameservers_for_packet ( packet )
87+ expect ( ns ) . to eq ( [ [ ruleless_nameserver , { } ] ] )
88+ end
89+ end
90+
91+ context 'When a nameserver rule is configured and a rule entry matches' do
92+ it 'The correct nameserver is returned' do
93+ packet = packet_for ( 'subdomain.metasploit.com' )
94+ ns = ruled_provider . nameservers_for_packet ( packet )
95+ expect ( ns ) . to eq ( [ [ ruled_nameserver , { } ] ] )
96+ end
97+ end
98+
99+ context 'When a nameserver rule is configured and no rule entry is applicable' do
100+ it 'The base nameserver is returned when no rule entry' do
101+ packet = packet_for ( 'subdomain.notmetasploit.com' )
102+ ns = ruled_provider . nameservers_for_packet ( packet )
103+ expect ( ns ) . to eq ( [ [ ruleless_nameserver , { } ] ] )
104+ end
105+ end
106+
107+ context 'When many rules are configured' do
108+ it 'Returns multiple entries if multiple rules match' do
109+ packet = packet_for ( 'subdomain.metasploit.com' )
110+ ns = many_ruled_provider . nameservers_for_packet ( packet )
111+ expect ( ns ) . to eq ( [ [ ruled_nameserver , { } ] , [ ruled_nameserver2 , { } ] ] )
112+ end
113+ end
114+ end
0 commit comments