bettercap 1.1.9 → 1.1.10
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/CONTRIBUTING.md +2 -2
- data/TODO.md +5 -2
- data/bin/bettercap +19 -11
- data/lib/bettercap.rb +5 -1
- data/lib/bettercap/base/ifirewall.rb +2 -0
- data/lib/bettercap/base/ispoofer.rb +2 -0
- data/lib/bettercap/context.rb +5 -2
- data/lib/bettercap/discovery/{arp.rb → agents/arp.rb} +15 -14
- data/lib/bettercap/discovery/{base.rb → agents/base.rb} +4 -4
- data/lib/bettercap/discovery/{icmp.rb → agents/icmp.rb} +2 -3
- data/lib/bettercap/discovery/{udp.rb → agents/udp.rb} +2 -2
- data/lib/bettercap/{discovery.rb → discovery/discovery.rb} +8 -1
- data/lib/bettercap/factories/firewall_factory.rb +2 -0
- data/lib/bettercap/factories/parser_factory.rb +11 -5
- data/lib/bettercap/factories/spoofer_factory.rb +3 -1
- data/lib/bettercap/firewalls/linux.rb +2 -0
- data/lib/bettercap/firewalls/osx.rb +2 -0
- data/lib/bettercap/firewalls/redirection.rb +2 -1
- data/lib/bettercap/httpd/server.rb +2 -3
- data/lib/bettercap/logger.rb +27 -10
- data/lib/bettercap/monkey/packetfu/utils.rb +5 -5
- data/lib/bettercap/network.rb +26 -16
- data/lib/bettercap/options.rb +27 -6
- data/lib/bettercap/proxy/certstore.rb +4 -3
- data/lib/bettercap/proxy/module.rb +2 -2
- data/lib/bettercap/proxy/proxy.rb +5 -5
- data/lib/bettercap/proxy/request.rb +2 -2
- data/lib/bettercap/proxy/response.rb +2 -0
- data/lib/bettercap/proxy/stream_logger.rb +15 -3
- data/lib/bettercap/proxy/streamer.rb +3 -1
- data/lib/bettercap/proxy/thread_pool.rb +4 -2
- data/lib/bettercap/shell.rb +2 -0
- data/lib/bettercap/sniffer/parsers/base.rb +3 -12
- data/lib/bettercap/sniffer/parsers/custom.rb +21 -0
- data/lib/bettercap/sniffer/parsers/ftp.rb +2 -0
- data/lib/bettercap/sniffer/parsers/httpauth.rb +4 -5
- data/lib/bettercap/sniffer/parsers/https.rb +3 -4
- data/lib/bettercap/sniffer/parsers/irc.rb +2 -0
- data/lib/bettercap/sniffer/parsers/mail.rb +2 -0
- data/lib/bettercap/sniffer/parsers/ntlmss.rb +3 -3
- data/lib/bettercap/sniffer/parsers/post.rb +7 -7
- data/lib/bettercap/sniffer/parsers/url.rb +11 -11
- data/lib/bettercap/sniffer/sniffer.rb +8 -2
- data/lib/bettercap/spoofers/arp.rb +15 -5
- data/lib/bettercap/spoofers/none.rb +2 -0
- data/lib/bettercap/target.rb +29 -10
- data/lib/bettercap/update_checker.rb +2 -0
- data/lib/bettercap/version.rb +1 -1
- metadata +8 -40
- data/Rakefile +0 -7
- data/test/factories/firewall_factory_test.rb +0 -54
- data/test/factories/parser_factory_test.rb +0 -36
- data/test/factories/spoofer_factory_test.rb +0 -15
- data/test/firewalls/linux_firewall_test.rb +0 -72
- data/test/firewalls/osx_firewall_test.rb +0 -72
- data/test/helpers/mock_shell.rb +0 -17
- data/test/logger_test.rb +0 -12
- data/test/network_test.rb +0 -14
- data/test/pcap/ftp.pcap +0 -0
- data/test/pcap/http.pcap +0 -0
- data/test/pcap/packets.pcap +0 -0
- data/test/proxy/response_test.rb +0 -56
- data/test/shell_test.rb +0 -15
- data/test/sniffer/parsers/base_parser_test.rb +0 -20
- data/test/sniffer/parsers/ftp_parser_test.rb +0 -27
- data/test/sniffer/parsers/url_parser_test.rb +0 -25
- data/test/target_test.rb +0 -24
- data/test/test_helper.rb +0 -47
data/test/shell_test.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'shell'
|
3
|
-
|
4
|
-
class ShellTest < MiniTest::Test
|
5
|
-
def test_successful_command_execution
|
6
|
-
result = Shell.execute "echo 'BetterCap is awesome!'"
|
7
|
-
assert_equal result, "BetterCap is awesome!\n"
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_failed_command_execution
|
11
|
-
assert_raises BetterCap::Error do
|
12
|
-
Shell.execute 'false'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'test_helper'
|
3
|
-
require 'sniffer/parsers/ftp'
|
4
|
-
require 'packetfu'
|
5
|
-
|
6
|
-
class BaseParserTest < MiniTest::Test
|
7
|
-
def setup
|
8
|
-
@packets = parsed_packets
|
9
|
-
@parser = BaseParser.new
|
10
|
-
end
|
11
|
-
|
12
|
-
# The base parser has no parsers by default, so it shouldn't be writing
|
13
|
-
# anything to STDOUT.
|
14
|
-
def test_parsing_packets
|
15
|
-
silence do |output|
|
16
|
-
@parser.on_packet @packets.first
|
17
|
-
assert output.length == 0
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'test_helper'
|
3
|
-
require 'packetfu'
|
4
|
-
require 'sniffer/parsers/ftp'
|
5
|
-
|
6
|
-
class FtpParserTest < MiniTest::Test
|
7
|
-
def setup
|
8
|
-
# The pcap file for the FTP tests was taken from the Practical Packet
|
9
|
-
# Analysis GitHub repo: https://github.com/markofu/pcaps
|
10
|
-
@packets = ftp_packets
|
11
|
-
@parser = FtpParser.new
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_parsing_ftp_packets_with_no_user_data
|
15
|
-
silence do |output|
|
16
|
-
@parser.on_packet @packets[0]
|
17
|
-
assert output.length == 0
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_parsing_ftp_packets_with_user_data
|
22
|
-
silence do |output|
|
23
|
-
@parser.on_packet @packets[4]
|
24
|
-
refute output.length == 0
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'test_helper'
|
3
|
-
require 'packetfu'
|
4
|
-
require 'sniffer/parsers/url'
|
5
|
-
|
6
|
-
class UrlParserTest < MiniTest::Test
|
7
|
-
def setup
|
8
|
-
@packets = http_packets
|
9
|
-
@parser = UrlParser.new
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_parsing_http_packets
|
13
|
-
silence do |output|
|
14
|
-
@parser.on_packet @packets[3]
|
15
|
-
refute output.length == 0
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_parsing_http_packets_without_any_urls
|
20
|
-
silence do |output|
|
21
|
-
@parser.on_packet @packets[0]
|
22
|
-
assert output.length == 0
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/test/target_test.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'target'
|
3
|
-
|
4
|
-
class TestTarget < MiniTest::Test
|
5
|
-
def setup
|
6
|
-
@target = Target.new('127.0.0.1', '08:00:20')
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_initialization
|
10
|
-
assert_equal @target.ip, '127.0.0.1'
|
11
|
-
assert_equal @target.mac, '08:00:20'
|
12
|
-
assert_equal @target.vendor, 'Oracle'
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_setting_mac
|
16
|
-
@target.mac = '7F:D0:BD:8B:60:DA'
|
17
|
-
assert_equal @target.mac, '7F:D0:BD:8B:60:DA'
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_string_coercion
|
21
|
-
@target.mac = '08:00:20'
|
22
|
-
assert_equal @target.to_s, '127.0.0.1 : 08:00:20 ( Oracle )'
|
23
|
-
end
|
24
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'helpers/mock_shell'
|
2
|
-
require 'securerandom'
|
3
|
-
|
4
|
-
# Override the `shell` private method of the firewall to return the mock
|
5
|
-
# shell. The mock shell's purpose is to capture any system calls made and
|
6
|
-
# verify that they were received.
|
7
|
-
def stubbed_firewall(target)
|
8
|
-
Class.new(target) do
|
9
|
-
define_method(:shell) do
|
10
|
-
MockShell
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
# Allow for a way to silence calls during test runs.
|
16
|
-
#
|
17
|
-
# This redirects STDOUT to /dev/null for any methods
|
18
|
-
# called inside the block of this method.
|
19
|
-
def silence(output_file_name = SecureRandom.hex)
|
20
|
-
captured_output = Tempfile.new output_file_name
|
21
|
-
Logger.logfile = captured_output
|
22
|
-
|
23
|
-
$stdout = File.new('/dev/null', 'w')
|
24
|
-
yield captured_output
|
25
|
-
ensure
|
26
|
-
$stdout = STDOUT
|
27
|
-
end
|
28
|
-
|
29
|
-
# Methods for getting PacketFu::Packet objects out of pcap files.
|
30
|
-
|
31
|
-
def parsed_packets
|
32
|
-
packets_with_filename 'packets'
|
33
|
-
end
|
34
|
-
|
35
|
-
def ftp_packets
|
36
|
-
packets_with_filename 'ftp'
|
37
|
-
end
|
38
|
-
|
39
|
-
def http_packets
|
40
|
-
packets_with_filename 'http'
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def packets_with_filename(filename)
|
46
|
-
PacketFu::PcapFile.read_packets(File.join(File.dirname(__FILE__),"pcap/#{filename}.pcap"))
|
47
|
-
end
|