module SPF::Util
Public Class Methods
hostname()
click to toggle source
# File lib/spf/util.rb, line 47 def self.hostname return @hostname ||= Socket.gethostbyname(Socket.gethostname).first rescue SocketError return @hostname ||= Socket.gethostname end
ip_address_reverse(ip_address)
click to toggle source
# File lib/spf/util.rb, line 78 def self.ip_address_reverse(ip_address) unless IP::V4 === ip_address or IP::V6 === ip_address raise SPF::InvalidOptionValueError.new('IP::V4 or IP::V6 address expected') end # Treat IPv4-mapped IPv6 addresses as IPv4 addresses: ip_address = ipv6_address_to_ipv4(ip_address) if ip_address.ipv4_mapped? case ip_address when IP::V4 octets = ip_address.to_addr.split('.').first(ip_address.pfxlen / 8) return "#{octets .reverse.join('.')}.in-addr.arpa." when IP::V6 nibbles = ip_address.to_hex .split('') .first(ip_address.pfxlen / 4) return "#{nibbles.reverse.join('.')}.ip6.arpa." end end
ip_address_to_string(ip_address)
click to toggle source
# File lib/spf/util.rb, line 71 def self.ip_address_to_string(ip_address) unless IP::V4 === ip_address or IP::V6 === ip_address raise SPF::InvalidOptionValueError.new('IP::V4 or IP::V6 address expected') end return ip_address.to_addr end
ipv4_address_to_ipv6(ipv4_address)
click to toggle source
# File lib/spf/util.rb, line 53 def self.ipv4_address_to_ipv6(ipv4_address) unless IP::V4 === ipv4_address raise SPF::InvalidOptionValueError.new('IP::V4 address expected') end return IP.new("::ffff:#{ipv4_address.to_addr}/#{ipv4_address.pfxlen - 32 + 128}") end
ipv4_mapped_ipv6_address_pattern()
click to toggle source
# File lib/spf/util.rb, line 43 def self.ipv4_mapped_ipv6_address_pattern /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})/i end
ipv6_address_is_ipv4_mapped(ipv6_address)
click to toggle source
# File lib/spf/util.rb, line 67 def self.ipv6_address_is_ipv4_mapped(ipv6_address) return ipv6_address.ipv4_mapped? end
ipv6_address_to_ipv4(ipv6_address)
click to toggle source
# File lib/spf/util.rb, line 60 def self.ipv6_address_to_ipv4(ipv6_address) unless IP::V6 === ipv6_address and ipv6_address.ipv4_mapped? raise SPF::InvalidOptionValueError, 'IPv4-mapped IP::V6 address expected' end return ipv6_address.native end
sanitize_string(string)
click to toggle source
# File lib/spf/util.rb, line 102 def self.sanitize_string(string) return \ string && string. gsub(/([\x00-\x1f\x7f-\xff])/) { |c| sprintf('\x%02x', c.ord) }. gsub(/([\u{0100}-\u{ffff}])/) { |u| sprintf('\x{%04x}', u.ord) } end
valid_domain_for_ip_address( sever, request, ip_address, domain, find_best_match = false, accept_any_domain = false )
click to toggle source
# File lib/spf/util.rb, line 94 def self.valid_domain_for_ip_address( sever, request, ip_address, domain, find_best_match = false, accept_any_domain = false ) # TODO end