Class: BetterCap::ProxyOptions
- Inherits:
-
Object
- Object
- BetterCap::ProxyOptions
- Defined in:
- lib/bettercap/options/proxy_options.rb
Instance Attribute Summary collapse
-
#custom_https_proxy ⇒ Object
Custom HTTPS transparent proxy address.
-
#custom_https_proxy_port ⇒ Object
Custom HTTPS transparent proxy port.
-
#custom_proxy ⇒ Object
Custom HTTP transparent proxy address.
-
#custom_proxy_port ⇒ Object
Custom HTTP transparent proxy port.
-
#custom_redirections ⇒ Object
Custom list of redirections.
-
#http_ports ⇒ Object
List of HTTP ports, [ 80 ] by default.
-
#https_ports ⇒ Object
List of HTTPS ports, [ 443 ] by default.
-
#proxy ⇒ Object
If true, HTTP transparent proxy will be enabled.
-
#proxy_https ⇒ Object
If true, HTTPS transparent proxy will be enabled.
-
#proxy_https_port ⇒ Object
HTTPS proxy port.
-
#proxy_module ⇒ Object
File name of the transparent proxy module to load.
-
#proxy_pem_file ⇒ Object
File name of the PEM certificate to use for the HTTPS proxy.
-
#proxy_port ⇒ Object
HTTP proxy port.
-
#sslstrip ⇒ Object
If true, sslstrip is enabled.
-
#tcp_proxy ⇒ Object
If true, TCP proxy will be enabled.
-
#tcp_proxy_module ⇒ Object
TCP proxy module to load.
-
#tcp_proxy_port ⇒ Object
TCP proxy local port.
-
#tcp_proxy_upstream_address ⇒ Object
TCP proxy upstream server address.
-
#tcp_proxy_upstream_port ⇒ Object
TCP proxy upstream server port.
Class Method Summary collapse
-
.parse_ports(value) ⇒ Object
Parse a comma separated list of ports and return an array containing only valid ports, raise BetterCap::Error if that array is empty.
Instance Method Summary collapse
- #any? ⇒ Boolean
-
#has_proxy_module? ⇒ Boolean
Return true if a proxy module was specified, otherwise false.
-
#initialize ⇒ ProxyOptions
constructor
A new instance of ProxyOptions.
- #parse!(ctx, opts) ⇒ Object
-
#parse_custom_proxy!(value, https = false) ⇒ Object
Setter for the #custom_proxy or #custom_https_proxy attribute, will raise a BetterCap::Error if
value
is not a valid IP address. -
#parse_redirection!(rule) ⇒ Object
Parse a custom redirection rule.
- #sslstrip? ⇒ Boolean
- #validate!(ctx) ⇒ Object
Constructor Details
#initialize ⇒ ProxyOptions
Returns a new instance of ProxyOptions.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/bettercap/options/proxy_options.rb', line 56 def initialize @http_ports = [ 80 ] @https_ports = [ 443 ] @proxy = false @proxy_https = false @proxy_port = 8080 @proxy_https_port = 8083 @proxy_pem_file = nil @proxy_module = nil @sslstrip = true @tcp_proxy = false @tcp_proxy_port = 2222 @tcp_proxy_upstream_address = nil @tcp_proxy_upstream_port = nil @tcp_proxy_module = nil @custom_proxy = nil @custom_proxy_port = 8080 @custom_https_proxy = nil @custom_https_proxy_port = 8083 @custom_redirections = [] end |
Instance Attribute Details
#custom_https_proxy ⇒ Object
Custom HTTPS transparent proxy address.
50 51 52 |
# File 'lib/bettercap/options/proxy_options.rb', line 50 def custom_https_proxy @custom_https_proxy end |
#custom_https_proxy_port ⇒ Object
Custom HTTPS transparent proxy port.
52 53 54 |
# File 'lib/bettercap/options/proxy_options.rb', line 52 def custom_https_proxy_port @custom_https_proxy_port end |
#custom_proxy ⇒ Object
Custom HTTP transparent proxy address.
46 47 48 |
# File 'lib/bettercap/options/proxy_options.rb', line 46 def custom_proxy @custom_proxy end |
#custom_proxy_port ⇒ Object
Custom HTTP transparent proxy port.
48 49 50 |
# File 'lib/bettercap/options/proxy_options.rb', line 48 def custom_proxy_port @custom_proxy_port end |
#custom_redirections ⇒ Object
Custom list of redirections.
54 55 56 |
# File 'lib/bettercap/options/proxy_options.rb', line 54 def custom_redirections @custom_redirections end |
#http_ports ⇒ Object
List of HTTP ports, [ 80 ] by default.
24 25 26 |
# File 'lib/bettercap/options/proxy_options.rb', line 24 def http_ports @http_ports end |
#https_ports ⇒ Object
List of HTTPS ports, [ 443 ] by default.
28 29 30 |
# File 'lib/bettercap/options/proxy_options.rb', line 28 def https_ports @https_ports end |
#proxy ⇒ Object
If true, HTTP transparent proxy will be enabled.
18 19 20 |
# File 'lib/bettercap/options/proxy_options.rb', line 18 def proxy @proxy end |
#proxy_https ⇒ Object
If true, HTTPS transparent proxy will be enabled.
20 21 22 |
# File 'lib/bettercap/options/proxy_options.rb', line 20 def proxy_https @proxy_https end |
#proxy_https_port ⇒ Object
HTTPS proxy port.
26 27 28 |
# File 'lib/bettercap/options/proxy_options.rb', line 26 def proxy_https_port @proxy_https_port end |
#proxy_module ⇒ Object
File name of the transparent proxy module to load.
32 33 34 |
# File 'lib/bettercap/options/proxy_options.rb', line 32 def proxy_module @proxy_module end |
#proxy_pem_file ⇒ Object
File name of the PEM certificate to use for the HTTPS proxy.
30 31 32 |
# File 'lib/bettercap/options/proxy_options.rb', line 30 def proxy_pem_file @proxy_pem_file end |
#proxy_port ⇒ Object
HTTP proxy port.
22 23 24 |
# File 'lib/bettercap/options/proxy_options.rb', line 22 def proxy_port @proxy_port end |
#sslstrip ⇒ Object
If true, sslstrip is enabled.
34 35 36 |
# File 'lib/bettercap/options/proxy_options.rb', line 34 def sslstrip @sslstrip end |
#tcp_proxy ⇒ Object
If true, TCP proxy will be enabled.
36 37 38 |
# File 'lib/bettercap/options/proxy_options.rb', line 36 def tcp_proxy @tcp_proxy end |
#tcp_proxy_module ⇒ Object
TCP proxy module to load.
44 45 46 |
# File 'lib/bettercap/options/proxy_options.rb', line 44 def tcp_proxy_module @tcp_proxy_module end |
#tcp_proxy_port ⇒ Object
TCP proxy local port.
38 39 40 |
# File 'lib/bettercap/options/proxy_options.rb', line 38 def tcp_proxy_port @tcp_proxy_port end |
#tcp_proxy_upstream_address ⇒ Object
TCP proxy upstream server address.
40 41 42 |
# File 'lib/bettercap/options/proxy_options.rb', line 40 def tcp_proxy_upstream_address @tcp_proxy_upstream_address end |
#tcp_proxy_upstream_port ⇒ Object
TCP proxy upstream server port.
42 43 44 |
# File 'lib/bettercap/options/proxy_options.rb', line 42 def tcp_proxy_upstream_port @tcp_proxy_upstream_port end |
Class Method Details
.parse_ports(value) ⇒ Object
Parse a comma separated list of ports and return an array containing only valid ports, raise BetterCap::Error if that array is empty.
208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/bettercap/options/proxy_options.rb', line 208 def self.parse_ports(value) ports = [] value.split(",").each do |v| v = v.strip.to_i if v > 0 and v <= 65535 ports << v end end raise BetterCap::Error, 'Invalid ports specified.' if ports.empty? ports end |
Instance Method Details
#any? ⇒ Boolean
253 254 255 |
# File 'lib/bettercap/options/proxy_options.rb', line 253 def any? @proxy or @proxy_https or @tcp_proxy or @custom_proxy end |
#has_proxy_module? ⇒ Boolean
Return true if a proxy module was specified, otherwise false.
245 246 247 |
# File 'lib/bettercap/options/proxy_options.rb', line 245 def has_proxy_module? !@proxy_module.nil? end |
#parse!(ctx, opts) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/bettercap/options/proxy_options.rb', line 82 def parse!( ctx, opts ) opts.separator "" opts.separator "PROXYING:".bold opts.separator "" opts.separator "" opts.separator " TCP:" opts.separator "" opts.on( '--tcp-proxy', 'Enable TCP proxy ( requires other --tcp-proxy-* options to be specified ).' ) do @tcp_proxy = true end opts.on( '--tcp-proxy-module MODULE', "Ruby TCP proxy module to load." ) do |v| @tcp_proxy_module = File.(v) Proxy::TCP::Module.load( @tcp_proxy_module ) end opts.on( '--tcp-proxy-port PORT', "Set local TCP proxy port, default to #{@tcp_proxy_port.to_s.yellow} ." ) do |v| @tcp_proxy = true @tcp_proxy_port = v.to_i end opts.on( '--tcp-proxy-upstream-address ADDRESS', 'Set TCP proxy upstream server address.' ) do |v| raise BetterCap::Error, 'Invalid TCP proxy upstream server address specified.' unless Network::Validator.is_ip?(v) @tcp_proxy = true @tcp_proxy_upstream_address = v end opts.on( '--tcp-proxy-upstream-port PORT', 'Set TCP proxy upstream server port.' ) do |v| @tcp_proxy = true @tcp_proxy_upstream_port = v.to_i end opts.separator " HTTP:" opts.separator "" opts.on( '--proxy', "Enable HTTP proxy and redirects all HTTP requests to it, default to #{'false'.yellow}." ) do @proxy = true end opts.on( '--proxy-port PORT', "Set HTTP proxy port, default to #{@proxy_port.to_s.yellow}." ) do |v| @proxy = true @proxy_port = v.to_i end opts.on( '--no-sslstrip', 'Disable SSLStrip.' ) do @sslstrip = false end opts.on( '--proxy-module MODULE', "Ruby proxy module to load, either a custom file or one of the following: #{Proxy::HTTP::Module.available.map{|x| x.yellow}.join(', ')}." ) do |v| Proxy::HTTP::Module.load(ctx, opts, v) end opts.on( '--http-ports PORT1,PORT2', "Comma separated list of HTTP ports to redirect to the proxy, default to #{@http_ports.map{|x| x.to_s.yellow }.join(', ')}." ) do |v| @http_ports = self.parse_ports( v ) end opts.separator "" opts.separator " HTTPS:" opts.separator "" opts.on( '--proxy-https', "Enable HTTPS proxy and redirects all HTTPS requests to it, default to #{'false'.yellow}." ) do @proxy_https = true end opts.on( '--proxy-https-port PORT', "Set HTTPS proxy port, default to #{@proxy_https_port.to_s.yellow}." ) do |v| @proxy_https = true @proxy_https_port = v.to_i end opts.on( '--proxy-pem FILE', "Use a custom PEM CA certificate file for the HTTPS proxy, default to #{Proxy::HTTP::SSL::Authority::DEFAULT.yellow} ." ) do |v| @proxy_https = true @proxy_pem_file = File. v end opts.on( '--https-ports PORT1,PORT2', "Comma separated list of HTTPS ports to redirect to the proxy, default to #{@https_ports.map{|x| x.to_s.yellow }.join(', ')}." ) do |v| @https_ports = self.parse_ports( v ) end opts.separator "" opts.separator " CUSTOM:" opts.separator "" opts.on( '--custom-proxy ADDRESS', 'Use a custom HTTP upstream proxy instead of the builtin one.' ) do |v| parse_custom_proxy!(v) end opts.on( '--custom-proxy-port PORT', "Specify a port for the custom HTTP upstream proxy, default to #{@custom_proxy_port.to_s.yellow}." ) do |v| @custom_proxy_port = v.to_i end opts.on( '--custom-https-proxy ADDRESS', 'Use a custom HTTPS upstream proxy instead of the builtin one.' ) do |v| parse_custom_proxy!( v, true ) end opts.on( '--custom-https-proxy-port PORT', "Specify a port for the custom HTTPS upstream proxy, default to #{@custom_https_proxy_port.to_s.yellow}." ) do |v| @custom_https_proxy_port = v.to_i end opts.on( '--custom-redirection RULE', "Apply a custom port redirection, the format of the rule is #{'PROTOCOL ORIGINAL_PORT NEW_PORT'.yellow}. For instance #{'TCP 21 2100'.yellow} will redirect all TCP traffic going to port 21, to port 2100." ) do |v| parse_redirection!( v ) end end |
#parse_custom_proxy!(value, https = false) ⇒ Object
Setter for the #custom_proxy or #custom_https_proxy attribute, will raise a BetterCap::Error if value
is not a valid IP address.
222 223 224 225 226 227 228 229 |
# File 'lib/bettercap/options/proxy_options.rb', line 222 def parse_custom_proxy!(value, https=false) raise BetterCap::Error, 'Invalid custom HTTP upstream proxy address specified.' unless Network::Validator.is_ip?(value) if https @custom_https_proxy = value else @custom_proxy = value end end |
#parse_redirection!(rule) ⇒ Object
Parse a custom redirection rule.
232 233 234 235 236 237 238 239 240 241 242 |
# File 'lib/bettercap/options/proxy_options.rb', line 232 def parse_redirection!(rule) if rule =~ /^((TCP)|(UDP))\s+(\d+)\s+(\d+)$/i @custom_redirections << { :proto => $1.upcase, :from => $4.to_i, :to => $5.to_i } else raise BetterCap::Error, 'Invalid custom redirection rule specified.' end end |
#sslstrip? ⇒ Boolean
249 250 251 |
# File 'lib/bettercap/options/proxy_options.rb', line 249 def sslstrip? @proxy and @sslstrip end |
#validate!(ctx) ⇒ Object
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/bettercap/options/proxy_options.rb', line 187 def validate!( ctx ) if @tcp_proxy raise BetterCap::Error, "No TCP proxy port specified ( --tcp-proxy-port PORT )." if @tcp_proxy_port.nil? raise BetterCap::Error, "No TCP proxy upstream server address specified ( --tcp-proxy-upstream-address ADDRESS )." if @tcp_proxy_upstream_address.nil? raise BetterCap::Error, "No TCP proxy upstream server port specified ( --tcp-proxy-upstream-port PORT )." if @tcp_proxy_upstream_port.nil? end if @sslstrip and ctx..servers.dnsd raise BetterCap::Error, "SSL Stripping and builtin DNS server are mutually exclusive features, " \ "either use the --no-sslstrip option or remove the --dns option." end if has_proxy_module? and ( !@proxy and !@proxy_https ) raise BetterCap::Error, "A proxy module was specified but none of the HTTP or HTTPS proxies are " \ "enabled, specify --proxy or --proxy-https options." end end |