class PhisherPhinder::ExtendedIpFactory
Public Class Methods
new(geoip_client:)
click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 6 def initialize(geoip_client:) @geoip_client = geoip_client end
Public Instance Methods
build(ip_string)
click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 10 def build(ip_string) return nil unless ip_string ip = IPAddr.new(ip_string) if non_public_ip?(ip) || ip.ipv6? SimpleIp.new(ip_address: ip) else ExtendedIp.new(ip_address: ip, geoip_ip_data: geoip_data(ip_string)) end rescue IPAddr::InvalidAddressError end
Private Instance Methods
geoip_data(ip_string)
click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 48 def geoip_data(ip_string) @geoip_client.lookup(ip_string) rescue MaxMind::GeoIP2::AddressNotFoundError, MaxMind::GeoIP2::AddressReservedError end
ipv4_class_a_private?(ip)
click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 36 def ipv4_class_a_private?(ip) IPAddr.new('10.0.0.1/8').include?(ip) end
ipv4_class_b_private?(ip)
click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 40 def ipv4_class_b_private?(ip) IPAddr.new('172.16.0.0/12').include?(ip) end
ipv4_class_c_private?(ip)
click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 44 def ipv4_class_c_private?(ip) IPAddr.new('192.168.0.0/16').include?(ip) end
localhost_ip?(ip)
click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 32 def localhost_ip?(ip) ip.loopback? end
non_public_ip?(ip)
click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 25 def non_public_ip?(ip) localhost_ip?(ip) || ipv4_class_a_private?(ip) || ipv4_class_b_private?(ip) || ipv4_class_c_private?(ip) end