Module: PrivateAddressCheck

Defined in:
lib/private_address_check.rb,
lib/private_address_check/version.rb,
lib/private_address_check/tcpsocket_ext.rb

Constant Summary collapse

CIDR_LIST =
[
  # Loopback
  IPAddr.new("127.0.0.0/8"),
  IPAddr.new("::1/64"),

  # Link Local,
  IPAddr.new("169.254.0.0/16"),

  # RFC 1918
  IPAddr.new("10.0.0.0/8"),
  IPAddr.new("172.16.0.0/12"),
  IPAddr.new("192.168.0.0/16"),

  # RFC 4193
  IPAddr.new("fc00::/7"),
]
VERSION =
"0.3.0"
PrivateConnectionAttemptedError =
Class.new(StandardError)

Class Method Summary collapse

Class Method Details

.only_public_connectionsObject



6
7
8
9
10
11
# File 'lib/private_address_check/tcpsocket_ext.rb', line 6

def only_public_connections
  Thread.current[:private_address_check] = true
  yield
ensure
  Thread.current[:private_address_check] = false
end

.private_address?(address) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
29
30
# File 'lib/private_address_check.rb', line 26

def private_address?(address)
  CIDR_LIST.any? do |cidr| 
    cidr.include?(address)
  end
end

.resolves_to_private_address?(hostname) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
36
37
# File 'lib/private_address_check.rb', line 32

def resolves_to_private_address?(hostname)
  ips = Resolv.getaddresses(hostname)
  ips.any? do |ip| 
    private_address?(ip)
  end
end