ip2cidr 0.0.1 → 0.0.2
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/bin/ip2cidr +4 -0
- data/lib/ip2cidr.rb +22 -63
- data/lib/ip2cidr/iphandling.rb +67 -0
- data/test/test_ip2cidr.rb +9 -27
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 85ddd250aa46758efa99ad5736cfe690752491aa
|
|
4
|
+
data.tar.gz: 8c7d0006155aa59defeddc6ef1764cf97d2440f5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2a86badb7c622ebd495300e1007aecd0c89ec80e4f9414caf5dd9cf7b486a77f403b2ac7efb8d8886dcd1287597a074ef52f321438f31a55408e4c023a2a2f7e
|
|
7
|
+
data.tar.gz: 7f1aa352abc09c6afe8b09607918a5f34724dc6f803fff9fa6e922f4ad73eb62462acaf9506ea9ed5eea4295af4f6c7c8ad949ea0797992a024e3143a4905d8c
|
data/bin/ip2cidr
ADDED
data/lib/ip2cidr.rb
CHANGED
|
@@ -1,66 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
# ipstring_to_long
|
|
3
|
-
# Convert an ip address in string format to integer.
|
|
4
|
-
def self.ipstring_to_long(ipstring)
|
|
5
|
-
ipstring = ipstring.split(".")
|
|
6
|
-
longip = Array.new(4)
|
|
7
|
-
for i in 0..3
|
|
8
|
-
longip[i] = ipstring[i].to_i
|
|
9
|
-
end
|
|
10
|
-
#return longip
|
|
11
|
-
return (longip[0] << 24) + (longip[1] << 16) +
|
|
12
|
-
(longip[2] << 8) + longip[3]
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# long_to_ip_string
|
|
16
|
-
# Convert an ip address in integer format to string.
|
|
17
|
-
def self.long_to_ip_string(longip)
|
|
18
|
-
ipstring = ""
|
|
19
|
-
ipstring = (longip >> 24).to_s + "." +
|
|
20
|
-
((longip & 0x00FFFFFF)>> 16).to_s + "." +
|
|
21
|
-
((longip & 0x0000FFFF) >> 8).to_s + "." +
|
|
22
|
-
(longip & 0x000000FF).to_s
|
|
23
|
-
return ipstring
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# iprange_to_cidr
|
|
27
|
-
# Return a list of cidr addresses given a range of ip
|
|
28
|
-
# addresses.
|
|
29
|
-
def self.iprange_to_cidr(startip, endip)
|
|
30
|
-
cidr2mask = [0x00000000, 0x80000000, 0xC0000000,
|
|
31
|
-
0xE0000000, 0xF0000000, 0xF8000000,
|
|
32
|
-
0xFC000000, 0xFE000000, 0xFF000000,
|
|
33
|
-
0xFF800000, 0xFFC00000, 0xFFE00000,
|
|
34
|
-
0xFFF00000, 0xFFF80000, 0xFFFC0000,
|
|
35
|
-
0xFFFE0000, 0xFFFF0000, 0xFFFF8000,
|
|
36
|
-
0xFFFFC000, 0xFFFFE000, 0xFFFFF000,
|
|
37
|
-
0xFFFFF800, 0xFFFFFC00, 0xFFFFFE00,
|
|
38
|
-
0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0,
|
|
39
|
-
0xFFFFFFE0, 0xFFFFFFF0, 0xFFFFFFF8,
|
|
40
|
-
0xFFFFFFFC, 0xFFFFFFFE, 0xFFFFFFFF]
|
|
41
|
-
startaddr = ipstring_to_long(startip)
|
|
42
|
-
endaddr = ipstring_to_long (endip)
|
|
43
|
-
cidrlist = Array.new
|
|
44
|
-
|
|
45
|
-
while endaddr >= startaddr
|
|
46
|
-
maxsize = 32
|
|
47
|
-
while maxsize > 0
|
|
48
|
-
mask = cidr2mask[maxsize - 1]
|
|
49
|
-
maskedbase = startaddr & mask
|
|
1
|
+
require "ip2cidr/iphandling"
|
|
50
2
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
3
|
+
# The main IPToCIDR driver
|
|
4
|
+
class IPToCIDR
|
|
5
|
+
# Converts IP Range to IP CIDR blocks
|
|
6
|
+
#
|
|
7
|
+
# Example:
|
|
8
|
+
# >> IPToCIDR.solveCIDR("172.254.6.1","192.168.254.254")
|
|
9
|
+
# => 192.168.254.0/24
|
|
10
|
+
# Arguments:
|
|
11
|
+
# startip: (String)
|
|
12
|
+
# endip: (String)
|
|
13
|
+
|
|
14
|
+
def self.solveCIDR(startip, endip)
|
|
15
|
+
cidr = IPHandling.new
|
|
16
|
+
|
|
17
|
+
# Check if IP Starting Address is valid
|
|
18
|
+
raise ArgumentError, 'IP Address is not valid' unless startip.split(".").length == 4
|
|
19
|
+
|
|
20
|
+
# Check if Ending IP Address is valid
|
|
21
|
+
raise ArgumentError, 'IP Address is not valid' unless endip.split(".").length == 4
|
|
22
|
+
|
|
23
|
+
cidr.iprange_to_cidr(startip,endip)
|
|
65
24
|
end
|
|
66
25
|
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
class IPHandling
|
|
2
|
+
# ipstring_to_long
|
|
3
|
+
# Convert an ip address in string format to integer.
|
|
4
|
+
def ipstring_to_long(ipstring)
|
|
5
|
+
ipstring = ipstring.split(".")
|
|
6
|
+
longip = Array.new(4)
|
|
7
|
+
for i in 0..3
|
|
8
|
+
longip[i] = ipstring[i].to_i
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
#return longip
|
|
12
|
+
return (longip[0] << 24) + (longip[1] << 16) +
|
|
13
|
+
(longip[2] << 8) + longip[3]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# long_to_ipstring
|
|
17
|
+
# Convert an ip address in integer format to string.
|
|
18
|
+
def long_to_ipstring(longip)
|
|
19
|
+
ipstring = ""
|
|
20
|
+
ipstring = (longip >> 24).to_s + "." +
|
|
21
|
+
((longip & 0x00FFFFFF)>> 16).to_s + "." +
|
|
22
|
+
((longip & 0x0000FFFF) >> 8).to_s + "." +
|
|
23
|
+
(longip & 0x000000FF).to_s
|
|
24
|
+
return ipstring
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# iprange_to_cidr
|
|
28
|
+
# Return a list of cidr addresses given a range of ip
|
|
29
|
+
# addresses.
|
|
30
|
+
def iprange_to_cidr(startip, endip)
|
|
31
|
+
cidr2mask = [0x00000000, 0x80000000, 0xC0000000,
|
|
32
|
+
0xE0000000, 0xF0000000, 0xF8000000,
|
|
33
|
+
0xFC000000, 0xFE000000, 0xFF000000,
|
|
34
|
+
0xFF800000, 0xFFC00000, 0xFFE00000,
|
|
35
|
+
0xFFF00000, 0xFFF80000, 0xFFFC0000,
|
|
36
|
+
0xFFFE0000, 0xFFFF0000, 0xFFFF8000,
|
|
37
|
+
0xFFFFC000, 0xFFFFE000, 0xFFFFF000,
|
|
38
|
+
0xFFFFF800, 0xFFFFFC00, 0xFFFFFE00,
|
|
39
|
+
0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0,
|
|
40
|
+
0xFFFFFFE0, 0xFFFFFFF0, 0xFFFFFFF8,
|
|
41
|
+
0xFFFFFFFC, 0xFFFFFFFE, 0xFFFFFFFF]
|
|
42
|
+
startaddr = ipstring_to_long(startip)
|
|
43
|
+
endaddr = ipstring_to_long (endip)
|
|
44
|
+
cidrlist = Array.new
|
|
45
|
+
|
|
46
|
+
while endaddr >= startaddr
|
|
47
|
+
maxsize = 32
|
|
48
|
+
while maxsize > 0
|
|
49
|
+
mask = cidr2mask[maxsize - 1]
|
|
50
|
+
maskedbase = startaddr & mask
|
|
51
|
+
|
|
52
|
+
break if maskedbase != startaddr
|
|
53
|
+
|
|
54
|
+
maxsize -= 1
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
x = Math.log(endaddr - startaddr + 1) / Math.log(2)
|
|
58
|
+
maxdiff = 32 - x.floor
|
|
59
|
+
maxsize = maxdiff if maxsize < maxdiff
|
|
60
|
+
|
|
61
|
+
cidrlist.push(long_to_ipstring(startaddr) + "/" + maxsize.to_s)
|
|
62
|
+
startaddr += 2**(32 - maxsize)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
return cidrlist
|
|
66
|
+
end
|
|
67
|
+
end
|
data/test/test_ip2cidr.rb
CHANGED
|
@@ -1,32 +1,14 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'minitest/autorun'
|
|
2
2
|
require 'ip2cidr'
|
|
3
3
|
|
|
4
|
-
class IPToCIDRTest < Test
|
|
5
|
-
def test_ipstring_to_long
|
|
6
|
-
assert_equal 0xc0a80001, IPToCIDR.ipstring_to_long("192.168.0.1").to_s(16)
|
|
7
|
-
assert_equal 0xffffffff, IPToCIDR.ipstring_to_long("255.255.255.255").to_s(16)
|
|
8
|
-
assert_equal 0x00000000, IPToCIDR.ipstring_to_long("0.0.0.0").to_s(16)
|
|
9
|
-
assert_equal 0xfefefefe, IPToCIDR.ipstring_to_long("254.254.254.254").to_s(16)
|
|
10
|
-
assert_equal 0x18ff0701, IPToCIDR.ipstring_to_long("24.255.7.1").to_s(16)
|
|
11
|
-
assert_equal 0xc23f0f60, IPToCIDR.ipstring_to_long("194.63.15.96").to_s(16)
|
|
12
|
-
assert_equal 0x2ef653ca, IPToCIDR.ipstring_to_long("46.246.83.202").to_s(16)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def test_long_to_ip_string
|
|
16
|
-
assert_equal "192.168.0.1", IPToCIDR.long_to_ip_string(0xc0a80001)
|
|
17
|
-
assert_equal "255.255.255.255", IPToCIDR.long_to_ip_string(0xffffffff)
|
|
18
|
-
assert_equal "0.0.0.0", IPToCIDR.long_to_ip_string(0x00000000)
|
|
19
|
-
assert_equal "254.254.254.254", IPToCIDR.long_to_ip_string(0xfefefefe)
|
|
20
|
-
assert_equal "24.255.7.1", IPToCIDR.long_to_ip_string(0x18ff0701)
|
|
21
|
-
assert_equal "194.63.15.96", IPToCIDR.long_to_ip_string(0xc23f0f60)
|
|
22
|
-
assert_equal "46.246.83.202", IPToCIDR.long_to_ip_string(0x2ef653ca)
|
|
23
|
-
end
|
|
4
|
+
class IPToCIDRTest < Minitest::Test
|
|
24
5
|
|
|
25
|
-
def
|
|
6
|
+
def test_solveCIDR
|
|
7
|
+
test1 = ["192.168.0.0/29"]
|
|
26
8
|
test2 = ["192.168.0.0/13", "192.176.0.0/12", "192.192.0.0/10", "193.0.0.0/8", "194.0.0.0/7",
|
|
27
9
|
"196.0.0.0/6", "200.0.0.0/5", "208.0.0.0/4", "224.0.0.0/4", "240.0.0.0/5", "248.0.0.0/6",
|
|
28
10
|
"252.0.0.0/7", "254.0.0.0/8", "255.0.0.0/9", "255.128.0.0/11", "255.160.0.0/13", "255.168.0.0/29"]
|
|
29
|
-
|
|
11
|
+
test3 = ["192.168.0.1/32"]
|
|
30
12
|
test4 = ["0.168.0.1/32", "0.168.0.2/31", "0.168.0.4/30", "0.168.0.8/29", "0.168.0.16/28",
|
|
31
13
|
"0.168.0.32/27", "0.168.0.64/26", "0.168.0.128/25", "0.168.1.0/24",
|
|
32
14
|
"0.168.2.0/23", "0.168.4.0/22", "0.168.8.0/21", "0.168.16.0/20",
|
|
@@ -36,9 +18,9 @@ class IPToCIDRTest < Test::Unit::TestCase
|
|
|
36
18
|
"32.0.0.0/3", "64.0.0.0/2", "128.0.0.0/2", "192.0.0.0/3", "224.0.0.0/4",
|
|
37
19
|
"240.0.0.0/5", "248.0.0.0/6", "252.0.0.0/7", "254.0.0.0/24"]
|
|
38
20
|
|
|
39
|
-
assert_equal
|
|
40
|
-
assert_equal test2,
|
|
41
|
-
assert_equal
|
|
42
|
-
assert_equal test4,
|
|
21
|
+
assert_equal test1, IPToCIDR.solveCIDR("192.168.0.0", "192.168.0.7")
|
|
22
|
+
assert_equal test2, IPToCIDR.solveCIDR("192.168.0.0", "255.168.0.7")
|
|
23
|
+
assert_equal test3, IPToCIDR.solveCIDR("192.168.0.1", "192.168.0.1")
|
|
24
|
+
assert_equal test4, IPToCIDR.solveCIDR("0.168.0.1", "254.0.0.255")
|
|
43
25
|
end
|
|
44
26
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ip2cidr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Carlo Niño A. Bitoon
|
|
@@ -17,11 +17,14 @@ email:
|
|
|
17
17
|
- carloninobitoon@yahoo.com
|
|
18
18
|
- kirkmadraga@outlook.com
|
|
19
19
|
- jp_suelto@yahoo.com
|
|
20
|
-
executables:
|
|
20
|
+
executables:
|
|
21
|
+
- ip2cidr
|
|
21
22
|
extensions: []
|
|
22
23
|
extra_rdoc_files: []
|
|
23
24
|
files:
|
|
25
|
+
- bin/ip2cidr
|
|
24
26
|
- lib/ip2cidr.rb
|
|
27
|
+
- lib/ip2cidr/iphandling.rb
|
|
25
28
|
- test/test_ip2cidr.rb
|
|
26
29
|
homepage: http://rubygems.org/gems/iptocidr
|
|
27
30
|
licenses:
|