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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7560f2aa3dfe648e86b20a86c315844581516640
4
- data.tar.gz: c04d1f724bd0dd0cf53eb090376c36994295d3fe
3
+ metadata.gz: 85ddd250aa46758efa99ad5736cfe690752491aa
4
+ data.tar.gz: 8c7d0006155aa59defeddc6ef1764cf97d2440f5
5
5
  SHA512:
6
- metadata.gz: ec43c2211fdb5d43d859eaadb13a274da5e57b9484501bbd33636d81195688cf0280813ea0b35c477d4fe717a5001e90923f8360e435f4e5d9856e2bbd6b1182
7
- data.tar.gz: 3288dee934e0b30b0722633f2dce36c5bf844444f0cc08a02f28d3f103415e5c7af9c4aed6bc906dabc62285d1200803096759be0647929b82a6587d159c52ac
6
+ metadata.gz: 2a86badb7c622ebd495300e1007aecd0c89ec80e4f9414caf5dd9cf7b486a77f403b2ac7efb8d8886dcd1287597a074ef52f321438f31a55408e4c023a2a2f7e
7
+ data.tar.gz: 7f1aa352abc09c6afe8b09607918a5f34724dc6f803fff9fa6e922f4ad73eb62462acaf9506ea9ed5eea4295af4f6c7c8ad949ea0797992a024e3143a4905d8c
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ip2cidr'
4
+ puts IPToCIDR.solveCIDR("#{ARGV[0]}", "#{ARGV[1]}")
@@ -1,66 +1,25 @@
1
- class IPToCIDR
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
- break if maskedbase != startaddr
52
-
53
- maxsize -= 1
54
- end
55
-
56
- x = Math.log(endaddr - startaddr + 1) / Math.log(2)
57
- maxdiff = 32 - x.floor
58
- maxsize = maxdiff if maxsize < maxdiff
59
-
60
- cidrlist.push(long_to_ip_string(startaddr) + "/" + maxsize.to_s)
61
- startaddr += 2**(32 - maxsize)
62
- end
63
-
64
- return cidrlist
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
@@ -1,32 +1,14 @@
1
- require 'test/unit'
1
+ require 'minitest/autorun'
2
2
  require 'ip2cidr'
3
3
 
4
- class IPToCIDRTest < Test::Unit::TestCase
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 test_iprange_to_cidr
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 "192.168.0.0/29", IPToCIDR.iprange_to_cidr("192.168.0.0", "192.168.0.7")
40
- assert_equal test2, IPToCIDR.iprange_to_cidr("192.168.0.0", "255.168.0.7")
41
- assert_equal "192.168.0.1/32", IPToCIDR.iprange_to_cidr("192.168.0.1", "192.168.0.1")
42
- assert_equal test4, IPToCIDR.iprange_to_cidr("0.168.0.1", "254.0.0.255")
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.1
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: