ip2cidr 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85ddd250aa46758efa99ad5736cfe690752491aa
4
- data.tar.gz: 8c7d0006155aa59defeddc6ef1764cf97d2440f5
3
+ metadata.gz: 2e127f420ac3bc3e02b2e2615e39fa762ae04c58
4
+ data.tar.gz: 0a3bff0f0e679dc0ec7f1c9d30d2e32bcff9309b
5
5
  SHA512:
6
- metadata.gz: 2a86badb7c622ebd495300e1007aecd0c89ec80e4f9414caf5dd9cf7b486a77f403b2ac7efb8d8886dcd1287597a074ef52f321438f31a55408e4c023a2a2f7e
7
- data.tar.gz: 7f1aa352abc09c6afe8b09607918a5f34724dc6f803fff9fa6e922f4ad73eb62462acaf9506ea9ed5eea4295af4f6c7c8ad949ea0797992a024e3143a4905d8c
6
+ metadata.gz: 220f930637eddd6bfca39398523fd1f179ddae2b58350bca4ea85e20dc81b3f64a49b0b2d36d3715ea4ec5a57d8faa11df2178c3bd87c3fd25488b147866229e
7
+ data.tar.gz: e346d1ff49cac35cf3de93aa6c17508eac56285fb4c4edd36f94c2f55891370e0e951a02b1fa529883c6435b583a3b2311f694b338d32e8bd9077838061ea051
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'ip2cidr'
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ip2cidr'
4
4
  puts IPToCIDR.solveCIDR("#{ARGV[0]}", "#{ARGV[1]}")
@@ -1,25 +1,30 @@
1
- require "ip2cidr/iphandling"
2
-
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)
24
- end
1
+ require "ip2cidr/iphandling"
2
+
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
+ raise ArgumentError, 'Special IP address error' if
24
+ (startip == "0.0.0.0") || (endip == "0.0.0.0") ||
25
+ (startip == "255.255.255.255") || (endip == "255.255.255.255")
26
+
27
+
28
+ cidr.iprange_to_cidr(startip, endip)
29
+ end
25
30
  end
@@ -1,67 +1,71 @@
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
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
+
45
+ # Check if Ending IP Address is greater than Starting IP Address
46
+ raise ArgumentError, 'Starting IP must be less than the end IP' unless startaddr < endaddr
47
+
48
+ cidrlist = Array.new
49
+
50
+ while endaddr >= startaddr
51
+ maxsize = 32
52
+ while maxsize > 0
53
+ mask = cidr2mask[maxsize - 1]
54
+ maskedbase = startaddr & mask
55
+
56
+ break if maskedbase != startaddr
57
+
58
+ maxsize -= 1
59
+ end
60
+
61
+ x = Math.log(endaddr - startaddr + 1) / Math.log(2)
62
+ maxdiff = 32 - x.floor
63
+ maxsize = maxdiff if maxsize < maxdiff
64
+
65
+ cidrlist.push(long_to_ipstring(startaddr) + "/" + maxsize.to_s)
66
+ startaddr += 2**(32 - maxsize)
67
+ end
68
+
69
+ return cidrlist
70
+ end
67
71
  end
@@ -1,26 +1,26 @@
1
- require 'minitest/autorun'
2
- require 'ip2cidr'
3
-
4
- class IPToCIDRTest < Minitest::Test
5
-
6
- def test_solveCIDR
7
- test1 = ["192.168.0.0/29"]
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",
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",
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"]
11
- test3 = ["192.168.0.1/32"]
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",
13
- "0.168.0.32/27", "0.168.0.64/26", "0.168.0.128/25", "0.168.1.0/24",
14
- "0.168.2.0/23", "0.168.4.0/22", "0.168.8.0/21", "0.168.16.0/20",
15
- "0.168.32.0/19", "0.168.64.0/18", "0.168.128.0/17", "0.169.0.0/16",
16
- "0.170.0.0/15", "0.172.0.0/14", "0.176.0.0/12", "0.192.0.0/10",
17
- "1.0.0.0/8", "2.0.0.0/7", "4.0.0.0/6", "8.0.0.0/5", "16.0.0.0/4",
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",
19
- "240.0.0.0/5", "248.0.0.0/6", "252.0.0.0/7", "254.0.0.0/24"]
20
-
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")
25
- end
1
+ require 'minitest/autorun'
2
+ require 'ip2cidr'
3
+
4
+ class IPToCIDRTest < Minitest::Test
5
+
6
+ def test_solveCIDR
7
+ test1 = ["192.168.0.0/29"]
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",
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",
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"]
11
+ test3 = ["192.168.0.1/32"]
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",
13
+ "0.168.0.32/27", "0.168.0.64/26", "0.168.0.128/25", "0.168.1.0/24",
14
+ "0.168.2.0/23", "0.168.4.0/22", "0.168.8.0/21", "0.168.16.0/20",
15
+ "0.168.32.0/19", "0.168.64.0/18", "0.168.128.0/17", "0.169.0.0/16",
16
+ "0.170.0.0/15", "0.172.0.0/14", "0.176.0.0/12", "0.192.0.0/10",
17
+ "1.0.0.0/8", "2.0.0.0/7", "4.0.0.0/6", "8.0.0.0/5", "16.0.0.0/4",
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",
19
+ "240.0.0.0/5", "248.0.0.0/6", "252.0.0.0/7", "254.0.0.0/24"]
20
+
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")
25
+ end
26
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.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlo Niño A. Bitoon