ipaddr 1.2.7 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ipaddr.rb +38 -18
- metadata +4 -8
- data/ipaddr.gemspec +0 -36
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3d7f44f2a3874755d2b38a4cf417bc3b86f1298a92a47ce0df1c6da780982f10
|
|
4
|
+
data.tar.gz: d7b75a507f7345cfdb5fa1e7141748031b102e843982a5d627fb3d2f9ff9c302
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 34b061ae03573b58b00b867655c94edb42970eccf6297ac29915fb5e9cec430479eadb0cae90c9857b395ed9d220cd9eaa596a791f0225237113ab010b6dcba4
|
|
7
|
+
data.tar.gz: 7347ead0e35fa0bad997db445806eda0bdc6d8ddcffba1b8ff6d8d36f3c3febfa429e59bf36a0b5381690c3881163b070b858dc92cea1d8eca887657a4085f96
|
data/lib/ipaddr.rb
CHANGED
|
@@ -40,7 +40,8 @@ require 'socket'
|
|
|
40
40
|
# p ipaddr3 #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>
|
|
41
41
|
|
|
42
42
|
class IPAddr
|
|
43
|
-
|
|
43
|
+
# The version string
|
|
44
|
+
VERSION = "1.2.9"
|
|
44
45
|
|
|
45
46
|
# 32 bit mask for IPv4
|
|
46
47
|
IN4MASK = 0xffffffff
|
|
@@ -151,8 +152,22 @@ class IPAddr
|
|
|
151
152
|
return self.clone.set(addr_mask(~@addr))
|
|
152
153
|
end
|
|
153
154
|
|
|
155
|
+
# Returns a new ipaddr greater than the original address by offset
|
|
156
|
+
def +(offset)
|
|
157
|
+
self.clone.set(@addr + offset, @family)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Returns a new ipaddr less than the original address by offset
|
|
161
|
+
def -(offset)
|
|
162
|
+
self.clone.set(@addr - offset, @family)
|
|
163
|
+
end
|
|
164
|
+
|
|
154
165
|
# Returns true if two ipaddrs are equal.
|
|
155
166
|
def ==(other)
|
|
167
|
+
if other.nil?
|
|
168
|
+
return false
|
|
169
|
+
end
|
|
170
|
+
|
|
156
171
|
other = coerce_other(other)
|
|
157
172
|
rescue
|
|
158
173
|
false
|
|
@@ -282,7 +297,7 @@ class IPAddr
|
|
|
282
297
|
@addr & 0xff000000 == 0x7f000000 # 127.0.0.1/8
|
|
283
298
|
when Socket::AF_INET6
|
|
284
299
|
@addr == 1 || # ::1
|
|
285
|
-
(@addr
|
|
300
|
+
(@addr >> 32 == 0xffff && (
|
|
286
301
|
@addr & 0xff000000 == 0x7f000000 # ::ffff:127.0.0.1/8
|
|
287
302
|
))
|
|
288
303
|
else
|
|
@@ -303,10 +318,10 @@ class IPAddr
|
|
|
303
318
|
@addr & 0xffff0000 == 0xc0a80000 # 192.168.0.0/16
|
|
304
319
|
when Socket::AF_INET6
|
|
305
320
|
@addr & 0xfe00_0000_0000_0000_0000_0000_0000_0000 == 0xfc00_0000_0000_0000_0000_0000_0000_0000 ||
|
|
306
|
-
(@addr
|
|
321
|
+
(@addr >> 32 == 0xffff && (
|
|
307
322
|
@addr & 0xff000000 == 0x0a000000 || # ::ffff:10.0.0.0/8
|
|
308
|
-
@addr & 0xfff00000 == 0xac100000 || # ::ffff
|
|
309
|
-
@addr & 0xffff0000 == 0xc0a80000 # ::ffff
|
|
323
|
+
@addr & 0xfff00000 == 0xac100000 || # ::ffff:172.16.0.0/12
|
|
324
|
+
@addr & 0xffff0000 == 0xc0a80000 # ::ffff:192.168.0.0/16
|
|
310
325
|
))
|
|
311
326
|
else
|
|
312
327
|
raise AddressFamilyError, "unsupported address family"
|
|
@@ -324,7 +339,7 @@ class IPAddr
|
|
|
324
339
|
@addr & 0xffff0000 == 0xa9fe0000 # 169.254.0.0/16
|
|
325
340
|
when Socket::AF_INET6
|
|
326
341
|
@addr & 0xffc0_0000_0000_0000_0000_0000_0000_0000 == 0xfe80_0000_0000_0000_0000_0000_0000_0000 || # fe80::/10
|
|
327
|
-
(@addr
|
|
342
|
+
(@addr >> 32 == 0xffff && (
|
|
328
343
|
@addr & 0xffff0000 == 0xa9fe0000 # ::ffff:169.254.0.0/16
|
|
329
344
|
))
|
|
330
345
|
else
|
|
@@ -343,7 +358,7 @@ class IPAddr
|
|
|
343
358
|
_ipv4_compat?
|
|
344
359
|
end
|
|
345
360
|
|
|
346
|
-
def _ipv4_compat?
|
|
361
|
+
def _ipv4_compat? # :nodoc:
|
|
347
362
|
if !ipv6? || (@addr >> 32) != 0
|
|
348
363
|
return false
|
|
349
364
|
end
|
|
@@ -357,7 +372,7 @@ class IPAddr
|
|
|
357
372
|
# into an IPv4-mapped IPv6 address.
|
|
358
373
|
def ipv4_mapped
|
|
359
374
|
if !ipv4?
|
|
360
|
-
raise InvalidAddressError, "not an IPv4 address: #{
|
|
375
|
+
raise InvalidAddressError, "not an IPv4 address: #{to_s}"
|
|
361
376
|
end
|
|
362
377
|
clone = self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
|
|
363
378
|
clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
|
|
@@ -369,9 +384,11 @@ class IPAddr
|
|
|
369
384
|
def ipv4_compat
|
|
370
385
|
warn "IPAddr\##{__callee__} is obsolete", uplevel: 1 if $VERBOSE
|
|
371
386
|
if !ipv4?
|
|
372
|
-
raise InvalidAddressError, "not an IPv4 address: #{
|
|
387
|
+
raise InvalidAddressError, "not an IPv4 address: #{to_s}"
|
|
373
388
|
end
|
|
374
|
-
|
|
389
|
+
clone = self.clone.set(@addr, Socket::AF_INET6)
|
|
390
|
+
clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
|
|
391
|
+
clone
|
|
375
392
|
end
|
|
376
393
|
|
|
377
394
|
# Returns a new ipaddr built by converting the IPv6 address into a
|
|
@@ -400,7 +417,7 @@ class IPAddr
|
|
|
400
417
|
# Returns a string for DNS reverse lookup compatible with RFC3172.
|
|
401
418
|
def ip6_arpa
|
|
402
419
|
if !ipv6?
|
|
403
|
-
raise InvalidAddressError, "not an IPv6 address: #{
|
|
420
|
+
raise InvalidAddressError, "not an IPv6 address: #{to_s}"
|
|
404
421
|
end
|
|
405
422
|
return _reverse + ".ip6.arpa"
|
|
406
423
|
end
|
|
@@ -408,7 +425,7 @@ class IPAddr
|
|
|
408
425
|
# Returns a string for DNS reverse lookup compatible with RFC1886.
|
|
409
426
|
def ip6_int
|
|
410
427
|
if !ipv6?
|
|
411
|
-
raise InvalidAddressError, "not an IPv6 address: #{
|
|
428
|
+
raise InvalidAddressError, "not an IPv6 address: #{to_s}"
|
|
412
429
|
end
|
|
413
430
|
return _reverse + ".ip6.int"
|
|
414
431
|
end
|
|
@@ -533,6 +550,7 @@ class IPAddr
|
|
|
533
550
|
end
|
|
534
551
|
|
|
535
552
|
protected
|
|
553
|
+
# :stopdoc:
|
|
536
554
|
|
|
537
555
|
def begin_addr
|
|
538
556
|
@addr & @mask_addr
|
|
@@ -548,6 +566,7 @@ class IPAddr
|
|
|
548
566
|
raise AddressFamilyError, "unsupported address family"
|
|
549
567
|
end
|
|
550
568
|
end
|
|
569
|
+
#:startdoc:
|
|
551
570
|
|
|
552
571
|
# Set +@addr+, the internal stored ip address, to given +addr+. The
|
|
553
572
|
# parameter +addr+ is validated using the first +family+ member,
|
|
@@ -689,6 +708,7 @@ class IPAddr
|
|
|
689
708
|
end
|
|
690
709
|
end
|
|
691
710
|
|
|
711
|
+
# :stopdoc:
|
|
692
712
|
def coerce_other(other)
|
|
693
713
|
case other
|
|
694
714
|
when IPAddr
|
|
@@ -709,8 +729,8 @@ class IPAddr
|
|
|
709
729
|
octets = addr.split('.')
|
|
710
730
|
end
|
|
711
731
|
octets.inject(0) { |i, s|
|
|
712
|
-
(n = s.to_i) < 256 or raise InvalidAddressError, "invalid address: #{
|
|
713
|
-
(s != '0') && s.start_with?('0') and raise InvalidAddressError, "zero-filled number in IPv4 address is ambiguous: #{
|
|
732
|
+
(n = s.to_i) < 256 or raise InvalidAddressError, "invalid address: #{addr}"
|
|
733
|
+
(s != '0') && s.start_with?('0') and raise InvalidAddressError, "zero-filled number in IPv4 address is ambiguous: #{addr}"
|
|
714
734
|
i << 8 | n
|
|
715
735
|
}
|
|
716
736
|
end
|
|
@@ -727,19 +747,19 @@ class IPAddr
|
|
|
727
747
|
right = ''
|
|
728
748
|
when RE_IPV6ADDRLIKE_COMPRESSED
|
|
729
749
|
if $4
|
|
730
|
-
left.count(':') <= 6 or raise InvalidAddressError, "invalid address: #{
|
|
750
|
+
left.count(':') <= 6 or raise InvalidAddressError, "invalid address: #{left}"
|
|
731
751
|
addr = in_addr($~[4,4])
|
|
732
752
|
left = $1
|
|
733
753
|
right = $3 + '0:0'
|
|
734
754
|
else
|
|
735
755
|
left.count(':') <= ($1.empty? || $2.empty? ? 8 : 7) or
|
|
736
|
-
raise InvalidAddressError, "invalid address: #{
|
|
756
|
+
raise InvalidAddressError, "invalid address: #{left}"
|
|
737
757
|
left = $1
|
|
738
758
|
right = $2
|
|
739
759
|
addr = 0
|
|
740
760
|
end
|
|
741
761
|
else
|
|
742
|
-
raise InvalidAddressError, "invalid address: #{
|
|
762
|
+
raise InvalidAddressError, "invalid address: #{left}"
|
|
743
763
|
end
|
|
744
764
|
l = left.split(':')
|
|
745
765
|
r = right.split(':')
|
|
@@ -800,7 +820,7 @@ unless Socket.const_defined? :AF_INET6
|
|
|
800
820
|
class << IPSocket
|
|
801
821
|
private
|
|
802
822
|
|
|
803
|
-
def valid_v6?(addr)
|
|
823
|
+
def valid_v6?(addr) # :nodoc:
|
|
804
824
|
case addr
|
|
805
825
|
when IPAddr::RE_IPV6ADDRLIKE_FULL
|
|
806
826
|
if $2
|
metadata
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ipaddr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Akinori MUSHA
|
|
8
8
|
- Hajimu UMEMOTO
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies: []
|
|
14
13
|
description: |
|
|
15
14
|
IPAddr provides a set of methods to manipulate an IP address.
|
|
@@ -23,14 +22,12 @@ extra_rdoc_files: []
|
|
|
23
22
|
files:
|
|
24
23
|
- LICENSE.txt
|
|
25
24
|
- README.md
|
|
26
|
-
- ipaddr.gemspec
|
|
27
25
|
- lib/ipaddr.rb
|
|
28
26
|
homepage: https://github.com/ruby/ipaddr
|
|
29
27
|
licenses:
|
|
30
28
|
- Ruby
|
|
31
29
|
- BSD-2-Clause
|
|
32
30
|
metadata: {}
|
|
33
|
-
post_install_message:
|
|
34
31
|
rdoc_options: []
|
|
35
32
|
require_paths:
|
|
36
33
|
- lib
|
|
@@ -38,15 +35,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
38
35
|
requirements:
|
|
39
36
|
- - ">="
|
|
40
37
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '2.
|
|
38
|
+
version: '2.4'
|
|
42
39
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
40
|
requirements:
|
|
44
41
|
- - ">="
|
|
45
42
|
- !ruby/object:Gem::Version
|
|
46
43
|
version: '0'
|
|
47
44
|
requirements: []
|
|
48
|
-
rubygems_version:
|
|
49
|
-
signing_key:
|
|
45
|
+
rubygems_version: 4.0.6
|
|
50
46
|
specification_version: 4
|
|
51
47
|
summary: A class to manipulate an IP address in ruby
|
|
52
48
|
test_files: []
|
data/ipaddr.gemspec
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
# coding: utf-8
|
|
3
|
-
|
|
4
|
-
if File.exist?(File.expand_path("ipaddr.gemspec"))
|
|
5
|
-
lib = File.expand_path("../lib", __FILE__)
|
|
6
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
7
|
-
|
|
8
|
-
file = File.expand_path("ipaddr.rb", lib)
|
|
9
|
-
else
|
|
10
|
-
# for ruby-core
|
|
11
|
-
file = File.expand_path("../ipaddr.rb", __FILE__)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
version = File.foreach(file).find do |line|
|
|
15
|
-
/^\s*VERSION\s*=\s*["'](.*)["']/ =~ line and break $1
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
Gem::Specification.new do |spec|
|
|
19
|
-
spec.name = "ipaddr"
|
|
20
|
-
spec.version = version
|
|
21
|
-
spec.authors = ["Akinori MUSHA", "Hajimu UMEMOTO"]
|
|
22
|
-
spec.email = ["knu@idaemons.org", "ume@mahoroba.org"]
|
|
23
|
-
|
|
24
|
-
spec.summary = %q{A class to manipulate an IP address in ruby}
|
|
25
|
-
spec.description = <<-'DESCRIPTION'
|
|
26
|
-
IPAddr provides a set of methods to manipulate an IP address.
|
|
27
|
-
Both IPv4 and IPv6 are supported.
|
|
28
|
-
DESCRIPTION
|
|
29
|
-
spec.homepage = "https://github.com/ruby/ipaddr"
|
|
30
|
-
spec.licenses = ["Ruby", "BSD-2-Clause"]
|
|
31
|
-
|
|
32
|
-
spec.files = ["LICENSE.txt", "README.md", "ipaddr.gemspec", "lib/ipaddr.rb"]
|
|
33
|
-
spec.require_paths = ["lib"]
|
|
34
|
-
|
|
35
|
-
spec.required_ruby_version = ">= 2.3"
|
|
36
|
-
end
|