bettercap 1.3.3 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31a820a7730bbf4c4b05afeffaa33bbdddd5c4a3
4
- data.tar.gz: 6983bea70e9ed11c583aa03ed1eddf4a746a8363
3
+ metadata.gz: 1b8517e99862edfe8f3472280ccfd8e340436054
4
+ data.tar.gz: dfeb4b57db59af6fb71cc2ed4f81ed0284bcf21f
5
5
  SHA512:
6
- metadata.gz: 222922d21c654249874b8c3de9fdad45844dc3bd31766d71ac930bcef3ea2620d54502654f4439636c92cd79b6da745669172bf30cffc3825ee0c698c468ee68
7
- data.tar.gz: b70724787a5dc6f6979f1dd00aa367b605c7b30bde931d79695187a0880ae686e669dd2cf11394e6f801d5052b50db1c665bba86c8231874173f9a49887cb642
6
+ metadata.gz: 6db3475b1b3311b317dafe674239a32bfe1ea03c89461c4b722775be121c0d3eb6ac132a641d5714b825261ee2bf1e796aa55f5819d990a1d38759035f92bbd7
7
+ data.tar.gz: a82cc75c27c49a844b19b57a849b2ea64c90d822fc63c6b1a9f3d5dfeb3325e9b588fa1e7c65db1f30587995f363ae6a778c223dbfd92809157d4c5fef14fac1
data/bin/bettercap CHANGED
@@ -26,44 +26,7 @@ begin
26
26
  # error checking.
27
27
  ctx = BetterCap::Options.parse!
28
28
 
29
- # Start targets auto discovery if needed.
30
- if ctx.options.target.nil?
31
- BetterCap::Logger.info( "Targeting the whole subnet #{ctx.ifconfig[:ip4_obj].to_range} ..." ) unless ctx.options.has_spoofer?
32
- ctx.discovery.start
33
- # give some time to the discovery thread to spawn its workers,
34
- # this will prevent 'Too many open files' errors to delay host
35
- # discovery.
36
- sleep 1.5
37
- end
38
-
39
- # Start network spoofers if any.
40
- ctx.spoofer.each do |spoofer|
41
- spoofer.start
42
- end
43
-
44
- # Start proxies and setup port redirection.
45
- if ctx.options.proxy
46
- if ctx.options.has_http_sniffer_enabled?
47
- BetterCap::Logger.warn "WARNING: Both HTTP transparent proxy and URL parser are enabled, you're gonna see duplicated logs."
48
- end
49
- ctx.create_proxies
50
- end
51
-
52
- ctx.enable_port_redirection!
53
-
54
- # Start local HTTP server.
55
- if ctx.options.httpd
56
- ctx.httpd = BetterCap::HTTPD::Server.new( ctx.options.httpd_port, ctx.options.httpd_path )
57
- ctx.httpd.start
58
- end
59
-
60
- # Start network sniffer.
61
- if ctx.options.sniffer
62
- BetterCap::Sniffer.start ctx
63
- elsif ctx.options.has_spoofer?
64
- BetterCap::Logger.warn 'WARNING: Sniffer module was NOT enabled ( -X argument ), this '\
65
- 'will cause the MITM to run but no data to be collected.' unless ctx.options.has_spoofer?
66
- end
29
+ ctx.start!
67
30
 
68
31
  loop do
69
32
  sleep 10
data/lib/bettercap.rb CHANGED
@@ -60,4 +60,5 @@ require 'bettercap/proxy/proxy'
60
60
  require 'bettercap/proxy/streamer'
61
61
  require 'bettercap/proxy/module'
62
62
  require 'bettercap/proxy/certstore'
63
- require 'bettercap/httpd/server'
63
+ require 'bettercap/network/servers/httpd'
64
+ require 'bettercap/network/servers/dnsd'
@@ -31,8 +31,10 @@ class Context
31
31
  attr_accessor :discovery
32
32
  # A list of BetterCap::Spoofers class instances.
33
33
  attr_accessor :spoofer
34
- # Instance of BetterCap::HTTPD::Server class.
34
+ # Instance of BetterCap::Network::Servers::HTTPD class.
35
35
  attr_accessor :httpd
36
+ # Instance of BetterCap::Network::Servers::DNSD class.
37
+ attr_accessor :dnsd
36
38
  # Instance of OpenSSL::X509::Certificate class used
37
39
  # for the HTTPS transparent proxy.
38
40
  attr_accessor :certificate
@@ -71,6 +73,7 @@ class Context
71
73
  @proxy_processor = nil
72
74
  @spoofer = nil
73
75
  @httpd = nil
76
+ @dnsd = nil
74
77
  @certificate = nil
75
78
  @proxies = []
76
79
  @redirections = []
@@ -115,6 +118,82 @@ class Context
115
118
  nil
116
119
  end
117
120
 
121
+ # Start everything!
122
+ def start!
123
+ # Start targets auto discovery if needed.
124
+ if @options.target.nil?
125
+ BetterCap::Logger.info( "Targeting the whole subnet #{@ifconfig[:ip4_obj].to_range} ..." ) unless @options.has_spoofer? or @options.arpcache
126
+ @discovery.start
127
+ # give some time to the discovery thread to spawn its workers,
128
+ # this will prevent 'Too many open files' errors to delay host
129
+ # discovery.
130
+ sleep 1.5
131
+ end
132
+
133
+ # Start network spoofers if any.
134
+ @spoofer.each do |spoofer|
135
+ spoofer.start
136
+ end
137
+
138
+ # Start proxies and setup port redirection.
139
+ if @options.proxy
140
+ if @options.has_http_sniffer_enabled?
141
+ BetterCap::Logger.warn "WARNING: Both HTTP transparent proxy and URL parser are enabled, you're gonna see duplicated logs."
142
+ end
143
+ create_proxies!
144
+ end
145
+
146
+ enable_port_redirection!
147
+
148
+ create_servers!
149
+
150
+ # Start network sniffer.
151
+ if @options.sniffer
152
+ Sniffer.start ctx
153
+ elsif @options.has_spoofer?
154
+ Logger.warn 'WARNING: Sniffer module was NOT enabled ( -X argument ), this '\
155
+ 'will cause the MITM to run but no data to be collected.' unless @options.has_spoofer?
156
+ end
157
+ end
158
+
159
+ # Stop every running daemon that was started and reset system state.
160
+ def finalize
161
+ @running = false
162
+
163
+ # Logger is silent if @running == false
164
+ puts "\nShutting down, hang on ...\n"
165
+
166
+ Logger.debug 'Stopping target discovery manager ...'
167
+ @discovery.stop
168
+
169
+ Logger.debug 'Stopping spoofers ...'
170
+ @spoofer.each do |spoofer|
171
+ spoofer.stop
172
+ end
173
+
174
+ # Spoofer might be sending some last packets to restore the targets,
175
+ # the packet queue must be stopped here.
176
+ @packets.stop
177
+
178
+ Logger.debug 'Stopping proxies ...'
179
+ @proxies.each do |proxy|
180
+ proxy.stop
181
+ end
182
+
183
+ Logger.debug 'Disabling port redirections ...'
184
+ @redirections.each do |r|
185
+ @firewall.del_port_redirection( r )
186
+ end
187
+
188
+ Logger.debug 'Restoring firewall state ...'
189
+ @firewall.restore
190
+
191
+ @dnsd.stop unless @dnsd.nil?
192
+ @httpd.stop unless @httpd.nil?
193
+ end
194
+
195
+ private
196
+
118
197
  # Apply needed BetterCap::Firewalls::Redirection objects.
119
198
  def enable_port_redirection!
120
199
  @redirections = @options.to_redirections @ifconfig
@@ -126,7 +205,7 @@ class Context
126
205
 
127
206
  # Initialize the needed transparent proxies and the processor routined which
128
207
  # is needed in order to run proxy modules.
129
- def create_proxies
208
+ def create_proxies!
130
209
  if @options.has_proxy_module?
131
210
  Proxy::Module.register_modules
132
211
 
@@ -181,39 +260,22 @@ class Context
181
260
  end
182
261
  end
183
262
 
184
- # Stop every running daemon that was started and reset system state.
185
- def finalize
186
- @running = false
187
-
188
- # Logger is silent if @running == false
189
- puts "\nShutting down, hang on ...\n"
190
-
191
- Logger.debug 'Stopping target discovery manager ...'
192
- @discovery.stop
263
+ # Initialize and start the needed servers.
264
+ def create_servers!
265
+ # Start local DNS server.
266
+ if @options.dnsd
267
+ Logger.warn "Starting DNS server with spoofing disabled, bettercap will only reply to local DNS queries." unless @options.has_spoofer?
193
268
 
194
- Logger.debug 'Stopping spoofers ...'
195
- @spoofer.each do |spoofer|
196
- spoofer.stop
269
+ @dnsd = Network::Servers::DNSD.new( @options.dnsd_file, @ifconfig[:ip_saddr], @options.dnsd_port )
270
+ @dnsd.start
197
271
  end
198
272
 
199
- # Spoofer might be sending some last packets to restore the targets,
200
- # the packet queue must be stopped here.
201
- @packets.stop
202
-
203
- Logger.debug 'Stopping proxies ...'
204
- @proxies.each do |proxy|
205
- proxy.stop
273
+ # Start local HTTP server.
274
+ if @options.httpd
275
+ @httpd = Network::Servers::HTTPD.new( @options.httpd_port, @options.httpd_path )
276
+ @httpd.start
206
277
  end
207
-
208
- Logger.debug 'Disabling port redirections ...'
209
- @redirections.each do |r|
210
- @firewall.del_port_redirection( r )
211
- end
212
-
213
- Logger.debug 'Restoring firewall state ...'
214
- @firewall.restore
215
-
216
- @httpd.stop unless @httpd.nil?
217
278
  end
279
+
218
280
  end
219
281
  end
@@ -103,7 +103,7 @@ class Thread
103
103
  while @running
104
104
  @ctx.targets = Network.get_alive_targets(@ctx).sort_by { |t| t.sortable_ip }
105
105
 
106
- print_differences prev
106
+ print_differences( prev ) unless @ctx.options.arpcache
107
107
 
108
108
  prev = @ctx.targets
109
109
 
@@ -0,0 +1,127 @@
1
+ # encoding: UTF-8
2
+ =begin
3
+
4
+ BETTERCAP
5
+
6
+ Author : Simone 'evilsocket' Margaritelli
7
+ Email : evilsocket@gmail.com
8
+ Blog : http://www.evilsocket.net/
9
+
10
+ This project is released under the GPL 3 license.
11
+
12
+ =end
13
+ require 'rubydns'
14
+
15
+ module BetterCap
16
+ module Network
17
+ module Servers
18
+
19
+ # Class to wrap RubyDNS::RuleBasedServer and add some utility methods.
20
+ class DnsWrapper < RubyDNS::RuleBasedServer
21
+ # Instantiate a server with a block.
22
+ def initialize(options = {}, &block)
23
+ super(options,&block)
24
+ @rules = options[:rules]
25
+ end
26
+ # Give a name and a record type, try to match a rule and use it for processing the given arguments.
27
+ def process(name, resource_class, transaction)
28
+ Logger.debug "[#{'DNS'.green}] Received #{resource_class.name} request for #{name} ..."
29
+ super
30
+ end
31
+ end
32
+
33
+ # Simple DNS server class used for DNS spoofing.
34
+ class DNSD
35
+ # Initialize the DNS server with the specified +address+ and tcp/udp +port+.
36
+ # The server will load +hosts_filename+ composed by 'regexp -> ip' entries
37
+ # to do custom DNS spoofing/resolution.
38
+ def initialize( hosts_filename, address = '0.0.0.0', port = 5300 )
39
+ @port = port
40
+ @address = address
41
+ @server = nil
42
+ @rules = []
43
+ @thread = nil
44
+ @ifaces = [
45
+ [:udp, address, port],
46
+ [:tcp, address, port]
47
+ ]
48
+
49
+ DNSD.parse_hosts( hosts_filename ).each do |exp,addr|
50
+ block = Proc.new do |transaction|
51
+ Logger.info "[#{transaction.options[:peer]} > #{'DNS'.green}] Received request for '#{transaction.question.to_s.yellow}', sending spoofed reply #{addr.yellow} ..."
52
+ transaction.respond!(addr)
53
+ end
54
+
55
+ @rules << RubyDNS::RuleBasedServer::Rule.new( [ exp, Resolv::DNS::Resource::IN::A ], block )
56
+ end
57
+
58
+ Logger.warn "Empty hosts file for DNS server." if @rules.empty?
59
+ end
60
+
61
+ # Start the server.
62
+ def start
63
+ Logger.info "[#{'DNS'.green}] Starting on #{@address}:#{@port} ( #{@rules.size} redirection rule#{if @rules.size > 1 then 's' else '' end} ) ..."
64
+
65
+ @thread = Thread.new {
66
+ RubyDNS::run_server(:listen => @ifaces, :asynchronous => true, :server_class => DnsWrapper, :rules => @rules ) do
67
+ # Suppress RubyDNS logging.
68
+ @logger.level = ::Logger::ERROR
69
+ @upstream ||= RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
70
+
71
+ # Default DNS handler
72
+ otherwise do |transaction|
73
+ Logger.debug "[#{transaction.options[:peer]} > #{'DNS'.green}] Received request for '#{transaction.question.to_s.yellow}' -> upstream DNS"
74
+ transaction.passthrough!(@upstream)
75
+ end
76
+ end
77
+ }
78
+ end
79
+
80
+ # Stop the server.
81
+ def stop
82
+ Logger.info "Stopping DNS server ..."
83
+ begin
84
+ @thread.kill
85
+ rescue; end
86
+ end
87
+
88
+ # Parse hosts from +filename+, example host file:
89
+ #
90
+ # # *.google.com will point to the attacker's computer.
91
+ # local .*google\.com
92
+ #
93
+ # # a custom redirection
94
+ # 12.12.12.12 wtf.idontexist.com
95
+ def self.parse_hosts( filename )
96
+ raise BetterCap::Error, "File '#{filename}' does not exist." unless File.exist?(filename)
97
+
98
+ hosts = {}
99
+ File.open(filename).each_with_index do |line,lineno|
100
+ line = line.strip
101
+ # skip empty lines and comments
102
+ next if line.empty? or line[0] == '#'
103
+ if line =~ /^([^\s]+)\s+(.+)$/
104
+ address = $1
105
+ expression = $2
106
+
107
+ if address == 'local'
108
+ address = Context.get.ifconfig[:ip_saddr].to_s
109
+ end
110
+
111
+ raise BetterCap::Error, "Invalid IPv4 address '#{address}' on line #{lineno + 1} of '#{filename}'." unless Network.is_ip?(address)
112
+
113
+ begin
114
+ hosts[ Regexp.new(expression) ] = address
115
+ rescue RegexpError
116
+ raise BetterCap::Error, "Invalid expression '#{expression}' on line #{lineno + 1} of '#{filename}'."
117
+ end
118
+ end
119
+ end
120
+
121
+ hosts
122
+ end
123
+ end
124
+
125
+ end
126
+ end
127
+ end
@@ -15,9 +15,11 @@ require 'webrick'
15
15
  require 'bettercap/logger'
16
16
 
17
17
  module BetterCap
18
- module HTTPD
18
+ module Network
19
+ module Servers
20
+
19
21
  # Simple HTTP server class used to serve static assets when needed.
20
- class Server
22
+ class HTTPD
21
23
  # Initialize the HTTP server with the specified tcp +port+ using
22
24
  # +path+ as the document root.
23
25
  def initialize( port = 8081, path = './' )
@@ -33,7 +35,7 @@ class Server
33
35
 
34
36
  # Start the server.
35
37
  def start
36
- Logger.info "Starting HTTPD on port #{@port} and path #{@path} ..."
38
+ Logger.info "[#{'HTTPD'.green}] Starting on port #{@port} and path #{@path} ..."
37
39
  @thread = Thread.new {
38
40
  @server.start
39
41
  }
@@ -47,5 +49,7 @@ class Server
47
49
  @thread.join
48
50
  end
49
51
  end
52
+
53
+ end
50
54
  end
51
55
  end
@@ -79,12 +79,18 @@ class Options
79
79
  attr_accessor :custom_https_proxy
80
80
  # Custom HTTPS transparent proxy port.
81
81
  attr_accessor :custom_https_proxy_port
82
- # If true, BetterCap::HTTPD::Server will be enabled.
82
+ # If true, BetterCap::Network::Servers::HTTPD will be enabled.
83
83
  attr_accessor :httpd
84
- # The port to bind BetterCap::HTTPD::Server to.
84
+ # The port to bind HTTP server to.
85
85
  attr_accessor :httpd_port
86
- # Web root of the BetterCap::HTTPD::Server.
86
+ # Web root of the HTTP server.
87
87
  attr_accessor :httpd_path
88
+ # If true, BetterCap::Network::Servers::DNSD will be enabled.
89
+ attr_accessor :dnsd
90
+ # The port to bind DNS server to.
91
+ attr_accessor :dnsd_port
92
+ # The host resolution file to use with the DNS server.
93
+ attr_accessor :dnsd_file
88
94
  # If true, bettercap will check for updates then exit.
89
95
  attr_accessor :check_updates
90
96
  # If true, targets NBNS hostname resolution won't be performed.
@@ -114,6 +120,10 @@ class Options
114
120
  @https_ports = [ 443 ]
115
121
  @ignore = nil
116
122
 
123
+ @dnsd = false
124
+ @dnsd_port = 5300
125
+ @dnsd_file = nil
126
+
117
127
  @sniffer = false
118
128
  @sniffer_pcap = nil
119
129
  @sniffer_filter = nil
@@ -311,6 +321,15 @@ class Options
311
321
  ctx.options.httpd_port = v.to_i
312
322
  end
313
323
 
324
+ opts.on( '--dns FILE', 'Enable DNS server and use this file as a hosts resolution table.' ) do |v|
325
+ ctx.options.dnsd = true
326
+ ctx.options.dnsd_file = File.expand_path v
327
+ end
328
+
329
+ opts.on( '--dns-port PORT', 'Set DNS server port, default to ' + ctx.options.dnsd_port.to_s + '.' ) do |v|
330
+ ctx.options.dnsd_port = v.to_i
331
+ end
332
+
314
333
  opts.on( '--httpd-path PATH', 'Set HTTP server path, default to ' + ctx.options.httpd_path + '.' ) do |v|
315
334
  ctx.options.httpd = true
316
335
  ctx.options.httpd_path = v
@@ -478,48 +497,42 @@ class Options
478
497
  spoofers
479
498
  end
480
499
 
500
+ # Helper method to create a Firewalls::Redirection object.
501
+ def redir( address, port, to, proto = 'TCP' )
502
+ Firewalls::Redirection.new( @iface, proto, port, address, to )
503
+ end
504
+
481
505
  # Create a list of BetterCap::Firewalls::Redirection objects which are needed
482
506
  # given the specified command line arguments.
483
507
  def to_redirections ifconfig
484
508
  redirections = []
485
509
 
510
+ if @dnsd
511
+ redirections << redir( ifconfig[:ip_saddr], 53, @dnsd_port )
512
+ redirections << redir( ifconfig[:ip_saddr], 53, @dnsd_port, 'UDP' )
513
+ end
514
+
486
515
  if @proxy
487
516
  @http_ports.each do |port|
488
- redirections << Firewalls::Redirection.new( @iface,
489
- 'TCP',
490
- port,
491
- ifconfig[:ip_saddr],
492
- @proxy_port )
517
+ redirections << redir( ifconfig[:ip_saddr], port, @proxy_port )
493
518
  end
494
519
  end
495
520
 
496
521
  if @proxy_https
497
522
  @https_ports.each do |port|
498
- redirections << Firewalls::Redirection.new( @iface,
499
- 'TCP',
500
- port,
501
- ifconfig[:ip_saddr],
502
- @proxy_https_port )
523
+ redirections << redir( ifconfig[:ip_saddr], port, @proxy_https_port )
503
524
  end
504
525
  end
505
526
 
506
527
  if @custom_proxy
507
528
  @http_ports.each do |port|
508
- redirections << Firewalls::Redirection.new( @iface,
509
- 'TCP',
510
- port,
511
- @custom_proxy,
512
- @custom_proxy_port )
529
+ redirections << redir( @custom_proxy, port, @custom_proxy_port )
513
530
  end
514
531
  end
515
532
 
516
533
  if @custom_https_proxy
517
534
  @https_ports.each do |port|
518
- redirections << Firewalls::Redirection.new( @iface,
519
- 'TCP',
520
- port,
521
- @custom_https_proxy,
522
- @custom_https_proxy_port )
535
+ redirections << redir( @custom_https_proxy, port, @custom_https_proxy_port )
523
536
  end
524
537
  end
525
538
 
@@ -538,6 +551,7 @@ class Options
538
551
  'https-proxy' => if proxy_https then on else off end,
539
552
  'sslstrip' => if proxy and sslstrip then on else off end,
540
553
  'http-server' => if httpd then on else off end,
554
+ 'dns-server' => if dnsd then on else off end
541
555
  }
542
556
 
543
557
  msg = "Starting [ "
@@ -91,7 +91,7 @@ class Proxy
91
91
  # Main server thread, will accept incoming connections and push them to
92
92
  # the thread pool.
93
93
  def server_thread
94
- Logger.info "#{@type} Proxy started on #{@address}:#{@port} ...\n"
94
+ Logger.info "[#{@type.green}] Proxy starting on #{@address}:#{@port} ...\n"
95
95
 
96
96
  @running = true
97
97
 
@@ -124,14 +124,21 @@ class Response
124
124
  ""
125
125
  end
126
126
 
127
- # If the header with +name+ is found, then a +value+ is assigned to it.
127
+ # If the header with +name+ is found, then a +value+ is assigned to it,
128
+ # otherwise it's created.
128
129
  def []=(name, value)
130
+ found = false
129
131
  @headers.each_with_index do |header,i|
130
132
  if header =~ /^#{name}:\s*.+$/i
131
133
  @headers[i] = "#{name}: #{value}"
134
+ found = true
132
135
  break
133
136
  end
134
137
  end
138
+
139
+ unless found
140
+ @headers << "#{name}: #{value}"
141
+ end
135
142
  end
136
143
 
137
144
  # Return a string representation of this response object, patching the
@@ -12,7 +12,7 @@ This project is released under the GPL 3 license.
12
12
  =end
13
13
  module BetterCap
14
14
  # Current version of bettercap.
15
- VERSION = '1.3.3'
15
+ VERSION = '1.3.4'
16
16
  # Program banner.
17
17
  BANNER = File.read( File.dirname(__FILE__) + '/banner' ).gsub( '#VERSION#', "v#{VERSION}")
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bettercap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simone Margaritelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-30 00:00:00.000000000 Z
11
+ date: 2016-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -86,8 +86,28 @@ dependencies:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: 0.8.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: rubydns
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.0'
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 1.0.3
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: '1.0'
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 1.0.3
89
109
  description: BetterCap is the state of the art, modular, portable and easily extensible
90
- MITM framework featuring ARP and ICMP spoofing, sslstripping, credentials harvesting
110
+ MITM framework featuring ARP, DNS and ICMP spoofing, sslstripping, credentials harvesting
91
111
  and more.
92
112
  email: evilsocket@gmail.com
93
113
  executables:
@@ -115,7 +135,6 @@ files:
115
135
  - lib/bettercap/firewalls/linux.rb
116
136
  - lib/bettercap/firewalls/osx.rb
117
137
  - lib/bettercap/firewalls/redirection.rb
118
- - lib/bettercap/httpd/server.rb
119
138
  - lib/bettercap/loader.rb
120
139
  - lib/bettercap/logger.rb
121
140
  - lib/bettercap/monkey/packetfu/utils.rb
@@ -123,6 +142,8 @@ files:
123
142
  - lib/bettercap/network/hw-prefixes
124
143
  - lib/bettercap/network/network.rb
125
144
  - lib/bettercap/network/packet_queue.rb
145
+ - lib/bettercap/network/servers/dnsd.rb
146
+ - lib/bettercap/network/servers/httpd.rb
126
147
  - lib/bettercap/network/target.rb
127
148
  - lib/bettercap/options.rb
128
149
  - lib/bettercap/proxy/certstore.rb