blob: 86b4e714c944c408f34dc0753e72a119df67ab65 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# frozen_string_literal: true
require 'ipaddr'
class IPAddr
# Displays this IP address in CIDR form, e.g. '127.0.0.0/16'.
#
# @return [String]
# @example
# IPAddr.new('127.0.0.1/24').to_s
# #=> '127.0.0.0'
#
# IPAddr.new('127.0.0.1/24').to_cidr
# #=> '127.0.0.0/24'
#
# IPAddr.new('2400:cb00:2001:470::1').to_cidr
# #=> '2400:cb00:2001:470::1/128'
#
# IPAddr.new('2400:cb00::/32').to_cidr
# #=> '2400:cb00::/32'
#
def to_cidr
"#{self}/#{@mask_addr.to_s(2).count('1')}"
end
def to_obfuscated_s(key)
return self.to_s if self.ipv6? # Fuck you, IPv6 is obfuscated enough :-D
int = self.to_i
"!#{((int >> 24) & 0xFF) ^ key[0]}.#{((int >> 16) & 0xFF) ^ key[1]}.#{((int >> 8) & 0xFF) ^ key[2]}.#{((int >> 0) & 0xFF) ^ key[3]}"
end
def self.deobfuscate(obfuscated, key)
IPAddr.new(obfuscated[1..]).to_obfuscated_s(key)
end
end
|