bettercap 1.1.3 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +42 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +25 -0
- data/README.md +1 -1
- data/Rakefile +7 -0
- data/TODO.md +2 -2
- data/bettercap.gemspec +2 -0
- data/bin/bettercap +48 -43
- data/lib/bettercap/context.rb +125 -20
- data/lib/bettercap/factories/firewall_factory.rb +4 -0
- data/lib/bettercap/factories/parser_factory.rb +2 -0
- data/lib/bettercap/firewalls/linux.rb +16 -10
- data/lib/bettercap/firewalls/osx.rb +19 -8
- data/lib/bettercap/logger.rb +2 -0
- data/lib/bettercap/network.rb +10 -4
- data/lib/bettercap/proxy/certstore.rb +68 -0
- data/lib/bettercap/proxy/proxy.rb +87 -43
- data/lib/bettercap/proxy/request.rb +22 -4
- data/lib/bettercap/proxy/response.rb +15 -0
- data/lib/bettercap/sniffer/sniffer.rb +22 -24
- data/lib/bettercap/spoofers/arp.rb +38 -6
- data/lib/bettercap/target.rb +1 -1
- data/lib/bettercap/version.rb +1 -1
- data/lib/bettercap.rb +1 -0
- data/test/factories/firewall_factory_test.rb +54 -0
- data/test/factories/parser_factory_test.rb +36 -0
- data/test/factories/spoofer_factory_test.rb +15 -0
- data/test/firewalls/linux_firewall_test.rb +72 -0
- data/test/firewalls/osx_firewall_test.rb +72 -0
- data/test/helpers/mock_shell.rb +17 -0
- data/test/logger_test.rb +12 -0
- data/test/network_test.rb +14 -0
- 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 +56 -0
- data/test/shell_test.rb +15 -0
- data/test/sniffer/parsers/base_parser_test.rb +20 -0
- data/test/sniffer/parsers/ftp_parser_test.rb +27 -0
- data/test/sniffer/parsers/url_parser_test.rb +25 -0
- data/test/target_test.rb +24 -0
- data/test/test_helper.rb +47 -0
- data/test_https_proxy.rb +29 -0
- metadata +40 -2
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'test_helper'
|
3
|
+
require 'firewalls/linux'
|
4
|
+
require 'helpers/mock_shell'
|
5
|
+
|
6
|
+
class OSXFirewallTest < MiniTest::Test
|
7
|
+
def test_enabling_forwarding
|
8
|
+
firewall = stubbed_firewall(LinuxFirewall).new
|
9
|
+
result = firewall.enable_forwarding true
|
10
|
+
|
11
|
+
assert_equal result, 'echo 1 > /proc/sys/net/ipv4/ip_forward'
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_disabling_forwarding
|
15
|
+
firewall = stubbed_firewall(LinuxFirewall).new
|
16
|
+
result = firewall.enable_forwarding false
|
17
|
+
|
18
|
+
assert_equal result, 'echo 0 > /proc/sys/net/ipv4/ip_forward'
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_enabling_icmp_broadcast
|
22
|
+
firewall = stubbed_firewall(LinuxFirewall).new
|
23
|
+
result = firewall.enable_icmp_bcast true
|
24
|
+
|
25
|
+
assert_equal result, 'echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts'
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_disabling_icmp_broadcast
|
29
|
+
firewall = stubbed_firewall(LinuxFirewall).new
|
30
|
+
result = firewall.enable_icmp_bcast false
|
31
|
+
|
32
|
+
assert_equal result, 'echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts'
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_whether_forwarding_is_enabled
|
36
|
+
expected_output = '1'
|
37
|
+
MockShell.stub :execute, expected_output do
|
38
|
+
|
39
|
+
firewall = stubbed_firewall(LinuxFirewall).new
|
40
|
+
result = firewall.forwarding_enabled?
|
41
|
+
|
42
|
+
assert result
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_whether_forwarding_is_disabled
|
48
|
+
expected_output = '0'
|
49
|
+
MockShell.stub :execute, expected_output do
|
50
|
+
|
51
|
+
firewall = stubbed_firewall(LinuxFirewall).new
|
52
|
+
result = firewall.forwarding_enabled?
|
53
|
+
|
54
|
+
refute result
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_enabling_the_firewall
|
60
|
+
firewall = stubbed_firewall(LinuxFirewall).new
|
61
|
+
result = firewall.enable true
|
62
|
+
|
63
|
+
assert_equal result, 'pfctl -e >/dev/null 2>&1'
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_disabling_the_firewall
|
67
|
+
firewall = stubbed_firewall(LinuxFirewall).new
|
68
|
+
result = firewall.enable false
|
69
|
+
|
70
|
+
assert_equal result, 'pfctl -d >/dev/null 2>&1'
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'test_helper'
|
3
|
+
require 'firewalls/osx'
|
4
|
+
require 'helpers/mock_shell'
|
5
|
+
|
6
|
+
class OSXFirewallTest < MiniTest::Test
|
7
|
+
def test_enabling_forwarding
|
8
|
+
firewall = stubbed_firewall(OSXFirewall).new
|
9
|
+
result = firewall.enable_forwarding true
|
10
|
+
|
11
|
+
assert_equal result, 'sysctl -w net.inet.ip.forwarding=1'
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_disabling_forwarding
|
15
|
+
firewall = stubbed_firewall(OSXFirewall).new
|
16
|
+
result = firewall.enable_forwarding false
|
17
|
+
|
18
|
+
assert_equal result, 'sysctl -w net.inet.ip.forwarding=0'
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_enabling_icmp_broadcast
|
22
|
+
firewall = stubbed_firewall(OSXFirewall).new
|
23
|
+
result = firewall.enable_icmp_bcast true
|
24
|
+
|
25
|
+
assert_equal result, 'sysctl -w net.inet.icmp.bmcastecho=1'
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_disabling_icmp_broadcast
|
29
|
+
firewall = stubbed_firewall(OSXFirewall).new
|
30
|
+
result = firewall.enable_icmp_bcast false
|
31
|
+
|
32
|
+
assert_equal result, 'sysctl -w net.inet.icmp.bmcastecho=0'
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_whether_forwarding_is_enabled
|
36
|
+
expected_output = 'net.inet.ip.forwarding: 1'
|
37
|
+
MockShell.stub :execute, expected_output do
|
38
|
+
|
39
|
+
firewall = stubbed_firewall(OSXFirewall).new
|
40
|
+
result = firewall.forwarding_enabled?
|
41
|
+
|
42
|
+
assert result
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_whether_forwarding_is_disabled
|
48
|
+
expected_output = 'net.inet.ip.forwarding: 0'
|
49
|
+
MockShell.stub :execute, expected_output do
|
50
|
+
|
51
|
+
firewall = stubbed_firewall(OSXFirewall).new
|
52
|
+
result = firewall.forwarding_enabled?
|
53
|
+
|
54
|
+
refute result
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_enabling_the_firewall
|
60
|
+
firewall = stubbed_firewall(OSXFirewall).new
|
61
|
+
result = firewall.enable true
|
62
|
+
|
63
|
+
assert_equal result, 'pfctl -e >/dev/null 2>&1'
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_disabling_the_firewall
|
67
|
+
firewall = stubbed_firewall(OSXFirewall).new
|
68
|
+
result = firewall.enable false
|
69
|
+
|
70
|
+
assert_equal result, 'pfctl -d >/dev/null 2>&1'
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module MockShell
|
2
|
+
class << self
|
3
|
+
# For easy testing, this method just returns back the command it is given.
|
4
|
+
# The real Shell class will return the output string.
|
5
|
+
def execute(command)
|
6
|
+
return command
|
7
|
+
end
|
8
|
+
|
9
|
+
def ifconfig(iface = '')
|
10
|
+
self.execute("LANG=en && ifconfig #{iface}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def arp
|
14
|
+
self.execute('LANG=en && arp -a')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/test/logger_test.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'test_helper'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
class LoggerTest < MiniTest::Test
|
6
|
+
def test_writing_with_a_logfile
|
7
|
+
silence do |output|
|
8
|
+
Logger.write 'Test log message'
|
9
|
+
assert_equal output.read, "Test log message\n"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'network'
|
3
|
+
|
4
|
+
class NetworkTest < MiniTest::Test
|
5
|
+
def test_valid_ip_address
|
6
|
+
valid = Network.is_ip? '127.0.0.1'
|
7
|
+
assert valid
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_invalid_ip_address
|
11
|
+
addresses = ['bad-ip', '255.255.255.255.255', '255.255', '999.999.999.999', 123]
|
12
|
+
addresses.each { |address| refute Network.is_ip?(address) }
|
13
|
+
end
|
14
|
+
end
|
data/test/pcap/ftp.pcap
ADDED
Binary file
|
data/test/pcap/http.pcap
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'proxy/response'
|
3
|
+
|
4
|
+
class TestProxyResponse < MiniTest::Test
|
5
|
+
def test_response_status_parsing
|
6
|
+
response = response_with_line 'HTTP/1.1 200 OK'
|
7
|
+
assert_equal response.headers, ['HTTP/1.1 200 OK']
|
8
|
+
assert_equal response.code, '200 OK'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_content_type_parsing
|
12
|
+
response = response_with_line 'Content-Type: text/xml'
|
13
|
+
assert_equal response.headers, ['Content-Type: text/xml']
|
14
|
+
assert_equal response.content_type, 'text/xml'
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_content_length_parsing
|
18
|
+
response = response_with_line 'Content-Length: 1024'
|
19
|
+
assert_equal response.headers, ['Content-Length: 1024']
|
20
|
+
assert_equal response.content_length, 1024
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_reaching_end_of_headers
|
24
|
+
response = response_with_line 'HTTP/1.1 200 OK'
|
25
|
+
refute response.headers_done
|
26
|
+
|
27
|
+
response << ''
|
28
|
+
assert response.headers_done
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_parsing_response_body
|
32
|
+
body = 'This line goes into the body'
|
33
|
+
|
34
|
+
response = response_with_line 'HTTP/1.1 200 OK'
|
35
|
+
response << ''
|
36
|
+
response << body
|
37
|
+
|
38
|
+
assert_equal response.body, body
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_textual
|
42
|
+
text_response = response_with_line 'Content-Type: text/xml'
|
43
|
+
image_response = response_with_line 'Content-Type: image/png'
|
44
|
+
|
45
|
+
assert text_response.textual?
|
46
|
+
refute image_response.textual?
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def response_with_line(line)
|
52
|
+
response = Proxy::Response.new
|
53
|
+
response << line
|
54
|
+
response
|
55
|
+
end
|
56
|
+
end
|
data/test/shell_test.rb
ADDED
@@ -0,0 +1,15 @@
|
|
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
|
@@ -0,0 +1,20 @@
|
|
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
|
@@ -0,0 +1,27 @@
|
|
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
|
@@ -0,0 +1,25 @@
|
|
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
ADDED
@@ -0,0 +1,24 @@
|
|
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
ADDED
@@ -0,0 +1,47 @@
|
|
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
|
data/test_https_proxy.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
require 'socket'
|
3
|
+
|
4
|
+
sock = TCPSocket.new( '172.20.10.2', 8083 )
|
5
|
+
|
6
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
7
|
+
|
8
|
+
# we need this? :P ctx.set_params(verify_mode: OpenSSL::SSL::VERIFY_PEER)
|
9
|
+
|
10
|
+
socket = OpenSSL::SSL::SSLSocket.new(sock, ctx).tap do |socket|
|
11
|
+
socket.sync_close = true
|
12
|
+
socket.connect
|
13
|
+
|
14
|
+
socket.write "GET / HTTP/1.1\n" +
|
15
|
+
"Host: www.facebook.com\n" +
|
16
|
+
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\n" +
|
17
|
+
"Accept-encoding: gzip, deflate, sdch\n" +
|
18
|
+
"Accept-language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,la;q=0.2\n" +
|
19
|
+
"Cache-control: max-age=0\n" +
|
20
|
+
"User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36\n" +
|
21
|
+
"\n\n"
|
22
|
+
|
23
|
+
while line = socket.gets # Read lines from socket
|
24
|
+
puts line # and print them
|
25
|
+
end
|
26
|
+
|
27
|
+
socket.close
|
28
|
+
end
|
29
|
+
|
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.1.
|
4
|
+
version: 1.1.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: 2015-
|
11
|
+
date: 2015-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.12.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: A complete, modular, portable and easily extensible MITM framework.
|
56
70
|
email: evilsocket@gmail.com
|
57
71
|
executables:
|
@@ -60,8 +74,12 @@ extensions: []
|
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
76
|
- .gitignore
|
77
|
+
- CONTRIBUTING.md
|
78
|
+
- Gemfile
|
79
|
+
- Gemfile.lock
|
63
80
|
- LICENSE.md
|
64
81
|
- README.md
|
82
|
+
- Rakefile
|
65
83
|
- TODO.md
|
66
84
|
- bettercap.gemspec
|
67
85
|
- bin/bettercap
|
@@ -86,6 +104,7 @@ files:
|
|
86
104
|
- lib/bettercap/logger.rb
|
87
105
|
- lib/bettercap/monkey/packetfu/utils.rb
|
88
106
|
- lib/bettercap/network.rb
|
107
|
+
- lib/bettercap/proxy/certstore.rb
|
89
108
|
- lib/bettercap/proxy/module.rb
|
90
109
|
- lib/bettercap/proxy/proxy.rb
|
91
110
|
- lib/bettercap/proxy/request.rb
|
@@ -105,6 +124,25 @@ files:
|
|
105
124
|
- lib/bettercap/spoofers/none.rb
|
106
125
|
- lib/bettercap/target.rb
|
107
126
|
- lib/bettercap/version.rb
|
127
|
+
- test/factories/firewall_factory_test.rb
|
128
|
+
- test/factories/parser_factory_test.rb
|
129
|
+
- test/factories/spoofer_factory_test.rb
|
130
|
+
- test/firewalls/linux_firewall_test.rb
|
131
|
+
- test/firewalls/osx_firewall_test.rb
|
132
|
+
- test/helpers/mock_shell.rb
|
133
|
+
- test/logger_test.rb
|
134
|
+
- test/network_test.rb
|
135
|
+
- test/pcap/ftp.pcap
|
136
|
+
- test/pcap/http.pcap
|
137
|
+
- test/pcap/packets.pcap
|
138
|
+
- test/proxy/response_test.rb
|
139
|
+
- test/shell_test.rb
|
140
|
+
- test/sniffer/parsers/base_parser_test.rb
|
141
|
+
- test/sniffer/parsers/ftp_parser_test.rb
|
142
|
+
- test/sniffer/parsers/url_parser_test.rb
|
143
|
+
- test/target_test.rb
|
144
|
+
- test/test_helper.rb
|
145
|
+
- test_https_proxy.rb
|
108
146
|
homepage: http://github.com/evilsocket/bettercap
|
109
147
|
licenses:
|
110
148
|
- GPL3
|