bettercap 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -3
- data/lib/bettercap.rb +4 -4
- data/lib/bettercap/context.rb +2 -2
- data/lib/bettercap/discovery/thread.rb +1 -0
- data/lib/bettercap/{arp_reader.rb → network/arp_reader.rb} +2 -0
- data/lib/bettercap/{hw-prefixes → network/hw-prefixes} +0 -0
- data/lib/bettercap/{network.rb → network/network.rb} +1 -1
- data/lib/bettercap/{packet_queue.rb → network/packet_queue.rb} +19 -7
- data/lib/bettercap/{target.rb → network/target.rb} +2 -0
- data/lib/bettercap/options.rb +11 -8
- data/lib/bettercap/proxy/module.rb +37 -0
- data/lib/bettercap/proxy/modules/injectcss.rb +60 -0
- data/lib/bettercap/proxy/modules/injectjs.rb +60 -0
- data/lib/bettercap/proxy/proxy.rb +0 -3
- data/lib/bettercap/sniffer/parsers/httpauth.rb +2 -2
- data/lib/bettercap/spoofers/arp.rb +0 -5
- data/lib/bettercap/spoofers/base.rb +1 -1
- data/lib/bettercap/spoofers/icmp.rb +1 -6
- data/lib/bettercap/version.rb +1 -1
- metadata +9 -8
- data/TODO.md +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54766752ef4193add9d30875e978316b4489c9f2
|
4
|
+
data.tar.gz: dd4a0475d6156464f1bbb7b2b0bc55be09e32afc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e073d1158b3cc7f6125d7e7b98cf6f41712c491d4687418bed7d647a2435c1ff10f8c41cda3987a19c894a33351648c1fdda1e5db090286280e8f7224136e284
|
7
|
+
data.tar.gz: 538f6f46aaf601822f7b582e5da4a3432bbe57f3bb17f71f197163ea46447cac9377f909dcf98fca39cd18f67385cb2299a528a495d0137ade3530e25364e93a
|
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-

|
3
2
|
http://www.bettercap.org/
|
4
3
|
|
5
|
-
[](http://badge.fury.io/rb/bettercap) [](https://codeclimate.com/github/evilsocket/bettercap) [](http://badge.fury.io/rb/bettercap) [](https://codeclimate.com/github/evilsocket/bettercap) [](https://gitter.im/evilsocket/bettercap?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
6
5
|
---
|
7
6
|
|
8
7
|
**bettercap** is a complete, modular, portable and easily extensible **MITM** tool and framework with every kind of diagnostic
|
data/lib/bettercap.rb
CHANGED
@@ -28,8 +28,8 @@ require 'bettercap/update_checker'
|
|
28
28
|
require 'bettercap/error'
|
29
29
|
require 'bettercap/loader'
|
30
30
|
require 'bettercap/options'
|
31
|
-
require 'bettercap/arp_reader'
|
32
|
-
require 'bettercap/packet_queue'
|
31
|
+
require 'bettercap/network/arp_reader'
|
32
|
+
require 'bettercap/network/packet_queue'
|
33
33
|
require 'bettercap/discovery/thread'
|
34
34
|
require 'bettercap/discovery/agents/base'
|
35
35
|
require 'bettercap/discovery/agents/arp'
|
@@ -42,9 +42,9 @@ require 'bettercap/factories/spoofer'
|
|
42
42
|
require 'bettercap/factories/parser'
|
43
43
|
require 'bettercap/logger'
|
44
44
|
require 'bettercap/shell'
|
45
|
-
require 'bettercap/network'
|
45
|
+
require 'bettercap/network/network'
|
46
46
|
require 'bettercap/version'
|
47
|
-
require 'bettercap/target'
|
47
|
+
require 'bettercap/network/target'
|
48
48
|
require 'bettercap/sniffer/sniffer'
|
49
49
|
require 'bettercap/firewalls/redirection'
|
50
50
|
require 'bettercap/proxy/stream_logger'
|
data/lib/bettercap/context.rb
CHANGED
@@ -100,7 +100,7 @@ class Context
|
|
100
100
|
end
|
101
101
|
Logger.debug "--------------------------------\n"
|
102
102
|
|
103
|
-
@packets = PacketQueue.new( @ifconfig[:iface], 4 )
|
103
|
+
@packets = Network::PacketQueue.new( @ifconfig[:iface], @options.packet_throttle, 4 )
|
104
104
|
end
|
105
105
|
|
106
106
|
# Find a target given its +ip+ and +mac+ addresses inside the #targets
|
@@ -128,7 +128,7 @@ class Context
|
|
128
128
|
def create_proxies
|
129
129
|
if @options.has_proxy_module?
|
130
130
|
Proxy::Module.register_modules
|
131
|
-
|
131
|
+
|
132
132
|
raise BetterCap::Error, "#{@options.proxy_module} is not a valid bettercap proxy module." if Proxy::Module.modules.empty?
|
133
133
|
end
|
134
134
|
|
@@ -8,6 +8,7 @@ This project is released under the GPL 3 license.
|
|
8
8
|
require 'bettercap/error'
|
9
9
|
|
10
10
|
module BetterCap
|
11
|
+
module Network
|
11
12
|
# This class is responsible for reading the computer ARP table.
|
12
13
|
class ArpReader
|
13
14
|
# Parse the current ARP cache and return a list of BetterCap::Target
|
@@ -76,3 +77,4 @@ class ArpReader
|
|
76
77
|
end
|
77
78
|
end
|
78
79
|
end
|
80
|
+
end
|
File without changes
|
@@ -8,15 +8,20 @@ This project is released under the GPL 3 license.
|
|
8
8
|
require 'bettercap/error'
|
9
9
|
|
10
10
|
module BetterCap
|
11
|
+
module Network
|
11
12
|
# This class is responsible for sending various network packets.
|
12
13
|
class PacketQueue
|
13
14
|
# Initialize the PacketQueue, it will spawn +nworkers+ thread and
|
14
15
|
# will send packets to the +iface+ network interface.
|
15
|
-
|
16
|
+
# If +packet_throttle+ is different than 0.0, it will be used as
|
17
|
+
# a delay between each packet to be sent.
|
18
|
+
def initialize( iface, packet_throttle = 0.0, nworkers = 4 )
|
16
19
|
@iface = iface
|
17
20
|
@nworkers = nworkers
|
21
|
+
@throttle = packet_throttle;
|
18
22
|
@running = true
|
19
|
-
@
|
23
|
+
@stream = Pcap.open_live( iface, 0xffff, false , 1 )
|
24
|
+
@mutex = Mutex.new
|
20
25
|
@udp = UDPSocket.new
|
21
26
|
@queue = Queue.new
|
22
27
|
@workers = (0...nworkers).map { ::Thread.new { worker } }
|
@@ -49,14 +54,17 @@ class PacketQueue
|
|
49
54
|
|
50
55
|
def dispatch_udp_packet(packet)
|
51
56
|
ip, port, data = packet
|
52
|
-
|
53
|
-
|
57
|
+
@mutex.synchronize {
|
58
|
+
Logger.debug "Sending UDP data packet to #{ip}:#{port} ..."
|
59
|
+
@udp.send( data, 0, ip, port )
|
60
|
+
}
|
54
61
|
end
|
55
62
|
|
56
63
|
def dispatch_raw_packet(packet)
|
57
|
-
|
58
|
-
|
59
|
-
|
64
|
+
@mutex.synchronize {
|
65
|
+
Logger.debug "Sending #{packet.class.name} packet ..."
|
66
|
+
@stream.inject( packet.headers[0].to_s )
|
67
|
+
}
|
60
68
|
end
|
61
69
|
|
62
70
|
def worker
|
@@ -77,6 +85,9 @@ class PacketQueue
|
|
77
85
|
when Object
|
78
86
|
dispatch_raw_packet(packet)
|
79
87
|
end
|
88
|
+
|
89
|
+
sleep(@throttle) if @throttle != 0.0
|
90
|
+
|
80
91
|
rescue Exception => e
|
81
92
|
Logger.debug "#{self.class.name} ( #{packet.class.name} ) : #{e.message}"
|
82
93
|
|
@@ -94,3 +105,4 @@ class PacketQueue
|
|
94
105
|
end
|
95
106
|
end
|
96
107
|
end
|
108
|
+
end
|
@@ -13,6 +13,7 @@ require 'bettercap/logger'
|
|
13
13
|
require 'socket'
|
14
14
|
|
15
15
|
module BetterCap
|
16
|
+
module Network
|
16
17
|
# This class represents a target, namely a single endpoint device on the
|
17
18
|
# network.
|
18
19
|
class Target
|
@@ -153,3 +154,4 @@ private
|
|
153
154
|
end
|
154
155
|
end
|
155
156
|
end
|
157
|
+
end
|
data/lib/bettercap/options.rb
CHANGED
@@ -83,6 +83,8 @@ class Options
|
|
83
83
|
# If true, bettercap won't forward packets for any target, causing
|
84
84
|
# connections to be killed.
|
85
85
|
attr_accessor :kill
|
86
|
+
# If different than 0, this time will be used as a delay while sending packets.
|
87
|
+
attr_accessor :packet_throttle
|
86
88
|
|
87
89
|
# Create a BetterCap::Options class instance using the specified network interface.
|
88
90
|
def initialize( iface )
|
@@ -97,6 +99,7 @@ class Options
|
|
97
99
|
@arpcache = false
|
98
100
|
@no_target_nbns = false
|
99
101
|
@kill = false
|
102
|
+
@packet_throttle = 0.0
|
100
103
|
|
101
104
|
@ignore = nil
|
102
105
|
|
@@ -250,13 +253,8 @@ class Options
|
|
250
253
|
ctx.options.proxy_pem_file = File.expand_path v
|
251
254
|
end
|
252
255
|
|
253
|
-
opts.on( '--proxy-module MODULE', 'Ruby proxy module to load.' ) do |v|
|
254
|
-
ctx
|
255
|
-
ctx.options.proxy_module = File.expand_path v
|
256
|
-
|
257
|
-
require ctx.options.proxy_module
|
258
|
-
|
259
|
-
Proxy::Module.register_options(opts)
|
256
|
+
opts.on( '--proxy-module MODULE', 'Ruby proxy module to load, either a custom file or one of the following: ' + Proxy::Module.available.join(', ') + ' .' ) do |v|
|
257
|
+
Proxy::Module.load(ctx, opts, v)
|
260
258
|
end
|
261
259
|
|
262
260
|
opts.on( '--custom-proxy ADDRESS', 'Use a custom HTTP upstream proxy instead of the builtin one.' ) do |v|
|
@@ -293,6 +291,11 @@ class Options
|
|
293
291
|
ctx.options.kill = true
|
294
292
|
end
|
295
293
|
|
294
|
+
opts.on( '--packet-throttle NUMBER', 'Number of seconds ( can be a decimal number ) to wait between each packet to be sent.' ) do |v|
|
295
|
+
ctx.options.packet_throttle = v.to_f
|
296
|
+
raise BetterCap::Error, "Invalid packet throttle value specified." if ctx.options.packet_throttle <= 0.0
|
297
|
+
end
|
298
|
+
|
296
299
|
opts.on( '--check-updates', 'Will check if any update is available and then exit.' ) do
|
297
300
|
ctx.options.check_updates = true
|
298
301
|
end
|
@@ -407,7 +410,7 @@ class Options
|
|
407
410
|
Logger.warn "Invalid target specified: #{target}"
|
408
411
|
end
|
409
412
|
|
410
|
-
valid_targets.map { |target| Target.new(target) }
|
413
|
+
valid_targets.map { |target| Network::Target.new(target) }
|
411
414
|
end
|
412
415
|
|
413
416
|
# Parse spoofers and return a list of BetterCap::Spoofers objects. Raise a
|
@@ -15,7 +15,44 @@ module BetterCap
|
|
15
15
|
module Proxy
|
16
16
|
# Base class for transparent proxy modules.
|
17
17
|
class Module
|
18
|
+
@@path = File.dirname(__FILE__) + '/modules/'
|
18
19
|
@@modules = []
|
20
|
+
|
21
|
+
# Return a list of available builtin proxy module names.
|
22
|
+
def self.available
|
23
|
+
avail = []
|
24
|
+
Dir.foreach( @@path ) do |file|
|
25
|
+
if file =~ /.rb/
|
26
|
+
avail << file.gsub('.rb','')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
avail
|
30
|
+
end
|
31
|
+
|
32
|
+
# Check if the module with +name+ is within the builtin ones.
|
33
|
+
def self.is_builtin?(name)
|
34
|
+
self.available.include?(name)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Load the module with +name+.
|
38
|
+
def self.load(ctx, opts, name)
|
39
|
+
ctx.options.proxy = true
|
40
|
+
|
41
|
+
if self.is_builtin?(name)
|
42
|
+
ctx.options.proxy_module = "#{@@path}/#{name}.rb"
|
43
|
+
else
|
44
|
+
ctx.options.proxy_module = File.expand_path(name)
|
45
|
+
end
|
46
|
+
|
47
|
+
begin
|
48
|
+
require ctx.options.proxy_module
|
49
|
+
|
50
|
+
self.register_options(opts)
|
51
|
+
rescue LoadError
|
52
|
+
raise BetterCap::Error, "Invalid proxy module name '#{name}' ."
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
19
56
|
# Return a list of registered modules.
|
20
57
|
def self.modules
|
21
58
|
@@modules
|
@@ -0,0 +1,60 @@
|
|
1
|
+
=begin
|
2
|
+
|
3
|
+
BETTERCAP
|
4
|
+
|
5
|
+
Author : Simone 'evilsocket' Margaritelli
|
6
|
+
Email : evilsocket@gmail.com
|
7
|
+
Blog : http://www.evilsocket.net/
|
8
|
+
|
9
|
+
This project is released under the GPL 3 license.
|
10
|
+
|
11
|
+
=end
|
12
|
+
class Injectcss < BetterCap::Proxy::Module
|
13
|
+
@@cssdata = nil
|
14
|
+
@@cssurl = nil
|
15
|
+
|
16
|
+
def self.on_options(opts)
|
17
|
+
opts.separator ""
|
18
|
+
opts.separator "Inject CSS Proxy Module Options:"
|
19
|
+
opts.separator ""
|
20
|
+
|
21
|
+
opts.on( '--css-data STRING', 'CSS code to be injected.' ) do |v|
|
22
|
+
@@cssdata = v
|
23
|
+
unless @@jsdata.include?("<style>")
|
24
|
+
@@cssdata = "<style>\n#{@@cssdata}\n</style>"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on( '--css-file PATH', 'Path of the CSS file to be injected.' ) do |v|
|
29
|
+
filename = File.expand_path v
|
30
|
+
raise BetterCap::Error, "#{filename} invalid file." unless File.exists?(filename)
|
31
|
+
@@cssdata = File.read( filename )
|
32
|
+
unless @@cssdata.include?("<style>")
|
33
|
+
@@cssdata = "<style>\n#{@@cssdata}\n</style>"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
opts.on( '--css-url URL', 'URL the CSS file to be injected.' ) do |v|
|
38
|
+
@@cssurl = v
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def on_request( request, response )
|
43
|
+
# is it a html page?
|
44
|
+
if response.content_type =~ /^text\/html.*/
|
45
|
+
# check command line arguments.
|
46
|
+
if @@cssdata.nil? and @@cssurl.nil?
|
47
|
+
BetterCap::Logger.warn "No --css-file or --css-url options specified, this proxy module won't work."
|
48
|
+
else
|
49
|
+
BetterCap::Logger.info "Injecting CSS #{if @@cssdata.nil? then "URL" else "file" end} into http://#{request.host}#{request.url}"
|
50
|
+
# inject URL
|
51
|
+
if @@cssdata.nil?
|
52
|
+
response.body.sub!( '</head>', " <link rel=\"stylesheet\" href=\"#{@cssurl}\"></script></head>" )
|
53
|
+
# inject data
|
54
|
+
else
|
55
|
+
response.body.sub!( '</head>', "#{@@cssdata}</head>" )
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
=begin
|
2
|
+
|
3
|
+
BETTERCAP
|
4
|
+
|
5
|
+
Author : Simone 'evilsocket' Margaritelli
|
6
|
+
Email : evilsocket@gmail.com
|
7
|
+
Blog : http://www.evilsocket.net/
|
8
|
+
|
9
|
+
This project is released under the GPL 3 license.
|
10
|
+
|
11
|
+
=end
|
12
|
+
class Injectjs < BetterCap::Proxy::Module
|
13
|
+
@@jsdata = nil
|
14
|
+
@@jsurl = nil
|
15
|
+
|
16
|
+
def self.on_options(opts)
|
17
|
+
opts.separator ""
|
18
|
+
opts.separator "Inject JS Proxy Module Options:"
|
19
|
+
opts.separator ""
|
20
|
+
|
21
|
+
opts.on( '--js-data STRING', 'Javascript code to be injected.' ) do |v|
|
22
|
+
@@jsdata = v
|
23
|
+
unless @@jsdata.include?("<script")
|
24
|
+
@@jsdata = "<script type=\"text/javascript\">\n#{@@jsdata}\n</script>"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on( '--js-file PATH', 'Path of the javascript file to be injected.' ) do |v|
|
29
|
+
filename = File.expand_path v
|
30
|
+
raise BetterCap::Error, "#{filename} invalid file." unless File.exists?(filename)
|
31
|
+
@@jsdata = File.read( filename )
|
32
|
+
unless @@jsdata.include?("<script")
|
33
|
+
@@jsdata = "<script type=\"text/javascript\">\n#{@@jsdata}\n</script>"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
opts.on( '--js-url URL', 'URL the javascript file to be injected.' ) do |v|
|
38
|
+
@@jsurl = v
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def on_request( request, response )
|
43
|
+
# is it a html page?
|
44
|
+
if response.content_type =~ /^text\/html.*/
|
45
|
+
# check command line arguments.
|
46
|
+
if @@jsdata.nil? and @@jsurl.nil?
|
47
|
+
BetterCap::Logger.warn "No --js-file or --js-url options specified, this proxy module won't work."
|
48
|
+
else
|
49
|
+
BetterCap::Logger.info "Injecting javascript #{if @@jsdata.nil? then "URL" else "file" end} into http://#{request.host}#{request.url}"
|
50
|
+
# inject URL
|
51
|
+
if @@jsdata.nil?
|
52
|
+
response.body.sub!( '</head>', "<script src=\"#{@@jsurl}\" type=\"text/javascript\"></script></head>" )
|
53
|
+
# inject data
|
54
|
+
else
|
55
|
+
response.body.sub!( '</head>', "#{@@jsdata}</head>" )
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -34,10 +34,10 @@ class Httpauth < Base
|
|
34
34
|
decoded = Base64.decode64(encoded)
|
35
35
|
user, pass = decoded.split(':')
|
36
36
|
|
37
|
-
StreamLogger.log_raw( pkt, '
|
37
|
+
StreamLogger.log_raw( pkt, 'HTTP BASIC AUTH', "http://#{hostname}#{path} - username=#{user} password=#{pass}".yellow )
|
38
38
|
|
39
39
|
elsif line =~ /Authorization:\s*Digest\s+(.+)/i
|
40
|
-
StreamLogger.log_raw( pkt, '
|
40
|
+
StreamLogger.log_raw( pkt, 'HTTP DIGEST AUTH', "http://#{hostname}#{path}\n#{$1}".yellow )
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -10,11 +10,6 @@ This project is released under the GPL 3 license.
|
|
10
10
|
|
11
11
|
=end
|
12
12
|
require 'bettercap/spoofers/base'
|
13
|
-
require 'bettercap/error'
|
14
|
-
require 'bettercap/context'
|
15
|
-
require 'bettercap/network'
|
16
|
-
require 'bettercap/logger'
|
17
|
-
require 'colorize'
|
18
13
|
|
19
14
|
module BetterCap
|
20
15
|
module Spoofers
|
@@ -90,7 +90,7 @@ private
|
|
90
90
|
def update_gateway!
|
91
91
|
hw = Network.get_hw_address( @ctx.ifconfig, @ctx.gateway )
|
92
92
|
raise BetterCap::Error, "Couldn't determine router MAC" if hw.nil?
|
93
|
-
@gateway = Target.new( @ctx.gateway, hw )
|
93
|
+
@gateway = Network::Target.new( @ctx.gateway, hw )
|
94
94
|
|
95
95
|
Logger.info "[#{'GATEWAY'.green}] #{@gateway.to_s(false)}"
|
96
96
|
end
|
@@ -10,11 +10,6 @@ This project is released under the GPL 3 license.
|
|
10
10
|
|
11
11
|
=end
|
12
12
|
require 'bettercap/spoofers/base'
|
13
|
-
require 'bettercap/error'
|
14
|
-
require 'bettercap/context'
|
15
|
-
require 'bettercap/network'
|
16
|
-
require 'bettercap/logger'
|
17
|
-
require 'colorize'
|
18
13
|
require 'net/dns'
|
19
14
|
require 'resolv'
|
20
15
|
|
@@ -123,7 +118,7 @@ class Icmp < Base
|
|
123
118
|
else
|
124
119
|
@ctx.firewall.enable_forwarding(true) unless @forwarding
|
125
120
|
end
|
126
|
-
|
121
|
+
|
127
122
|
@ctx.firewall.enable_send_redirects(false)
|
128
123
|
|
129
124
|
@spoof_thread = Thread.new { icmp_spoofer }
|
data/lib/bettercap/version.rb
CHANGED
@@ -11,7 +11,7 @@ This project is released under the GPL 3 license.
|
|
11
11
|
=end
|
12
12
|
module BetterCap
|
13
13
|
# Current version of bettercap.
|
14
|
-
VERSION = '1.2.
|
14
|
+
VERSION = '1.2.2'
|
15
15
|
# Program banner.
|
16
16
|
BANNER = File.read( File.dirname(__FILE__) + '/banner' ).gsub( '#VERSION#', "v#{VERSION}")
|
17
17
|
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.2.
|
4
|
+
version: 1.2.2
|
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-
|
11
|
+
date: 2016-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -90,8 +90,6 @@ files:
|
|
90
90
|
- CONTRIBUTING.md
|
91
91
|
- LICENSE.md
|
92
92
|
- README.md
|
93
|
-
- TODO.md
|
94
|
-
- lib/bettercap/arp_reader.rb
|
95
93
|
- lib/bettercap/banner
|
96
94
|
- lib/bettercap/context.rb
|
97
95
|
- lib/bettercap/discovery/agents/arp.rb
|
@@ -108,15 +106,19 @@ files:
|
|
108
106
|
- lib/bettercap/firewalls/osx.rb
|
109
107
|
- lib/bettercap/firewalls/redirection.rb
|
110
108
|
- lib/bettercap/httpd/server.rb
|
111
|
-
- lib/bettercap/hw-prefixes
|
112
109
|
- lib/bettercap/loader.rb
|
113
110
|
- lib/bettercap/logger.rb
|
114
111
|
- lib/bettercap/monkey/packetfu/utils.rb
|
115
|
-
- lib/bettercap/network.rb
|
112
|
+
- lib/bettercap/network/arp_reader.rb
|
113
|
+
- lib/bettercap/network/hw-prefixes
|
114
|
+
- lib/bettercap/network/network.rb
|
115
|
+
- lib/bettercap/network/packet_queue.rb
|
116
|
+
- lib/bettercap/network/target.rb
|
116
117
|
- lib/bettercap/options.rb
|
117
|
-
- lib/bettercap/packet_queue.rb
|
118
118
|
- lib/bettercap/proxy/certstore.rb
|
119
119
|
- lib/bettercap/proxy/module.rb
|
120
|
+
- lib/bettercap/proxy/modules/injectcss.rb
|
121
|
+
- lib/bettercap/proxy/modules/injectjs.rb
|
120
122
|
- lib/bettercap/proxy/proxy.rb
|
121
123
|
- lib/bettercap/proxy/request.rb
|
122
124
|
- lib/bettercap/proxy/response.rb
|
@@ -139,7 +141,6 @@ files:
|
|
139
141
|
- lib/bettercap/spoofers/base.rb
|
140
142
|
- lib/bettercap/spoofers/icmp.rb
|
141
143
|
- lib/bettercap/spoofers/none.rb
|
142
|
-
- lib/bettercap/target.rb
|
143
144
|
- lib/bettercap/update_checker.rb
|
144
145
|
- lib/bettercap/version.rb
|
145
146
|
- lib/bettercap.rb
|
data/TODO.md
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
This is a list of TODOs I use to keep track of tasks and upcoming features.
|
2
|
-
|
3
|
-
---
|
4
|
-
|
5
|
-
- [x] Implement `--ignore ADDR,ADDR,ADDR` option to filter out specific addresses from the targets list.
|
6
|
-
- [x] HTTP 1.1 chunked response support.
|
7
|
-
- [x] Ip address to hostname resolution.
|
8
|
-
- [x] Wrap every class with `module BetterCap` and refactor old code.
|
9
|
-
- [x] Use StreamLogger for both Proxy and Sniffer traffic.
|
10
|
-
- [x] Implement `--custom-parser REGEX` option.
|
11
|
-
- [x] Let `-T|--target` [support MAC addresses](https://github.com/evilsocket/bettercap/issues/82).
|
12
|
-
- [x] Fix modules structure by folder.
|
13
|
-
- [x] Document classes with RDoc.
|
14
|
-
- [x] ICMP Redirect ( double direct )
|
15
|
-
- [ ] Implement `--mkcert FILENAME` option to create custom HTTPS `crt` files.
|
16
|
-
- [ ] Implement sslstrip+ support.
|
17
|
-
- [ ] Rewrite proxy class using [em-proxy](https://github.com/igrigorik/em-proxy) library.
|
18
|
-
- [ ] HTTP/2 Support.
|
19
|
-
|
20
|
-
**Platform Specific**
|
21
|
-
|
22
|
-
- [ ] *BSD Support.
|
23
|
-
- [ ] Windows Support? ( OMG PLZ NO! )
|
24
|
-
- [ ] GNU/Linux [Active packet filtering/injection/etc](https://github.com/evilsocket/bettercap/issues/75) ( maybe using [this](https://github.com/gdelugre/ruby-nfqueue) ).
|
25
|
-
|
26
|
-
**Maybe**
|
27
|
-
|
28
|
-
- [ ] Implement event-driven core plugin infrastructure ( for webui, etc ).
|
29
|
-
- [ ] Implement web-ui core plugin.
|
30
|
-
- [ ] IPV6 Support.
|