PageRenderTime 53ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/ipv4_address.rb

https://github.com/pr0d1r2/ipv4_address
Ruby | 144 lines | 119 code | 24 blank | 1 comment | 2 complexity | 0f59d9d194ab23fd521af61ea1888539 MD5 | raw file
  1. require 'ipaddr'
  2. class IPv4Address < IPAddr
  3. # by IANA
  4. RESERVED = ['128.0.0.0/16', '191.255.0.0/16', '192.0.0.0/24', '223.255.255.0/24']
  5. PRIVATE = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']
  6. LOOPBACK = ['127.0.0.0/8']
  7. LINK_LOCAL = ['169.254.0.0/16']
  8. DOCUMENTATION = ['192.0.2.0/24', '198.51.100.0/24', '203.0.113.0/24']
  9. IPV6_RELAY = ['192.88.99.0/24']
  10. BENCHMARK = ['198.18.0.0/15']
  11. MULTICAST = ['224.0.0.0/4']
  12. def reserved?
  13. exist_in_pool?(RESERVED)
  14. end
  15. def self.reserved?(addr)
  16. begin
  17. new(addr).reserved?
  18. rescue
  19. false
  20. end
  21. end
  22. def private?
  23. exist_in_pool?(PRIVATE)
  24. end
  25. def self.private?(addr)
  26. begin
  27. new(addr).private?
  28. rescue
  29. false
  30. end
  31. end
  32. def loopback?
  33. exist_in_pool?(LOOPBACK)
  34. end
  35. def self.loopback?(addr)
  36. begin
  37. new(addr).loopback?
  38. rescue
  39. false
  40. end
  41. end
  42. def link_local?
  43. exist_in_pool?(LINK_LOCAL)
  44. end
  45. def self.link_local?(addr)
  46. begin
  47. new(addr).link_local?
  48. rescue
  49. false
  50. end
  51. end
  52. def documentation?
  53. exist_in_pool?(DOCUMENTATION)
  54. end
  55. def self.documentation?(addr)
  56. begin
  57. new(addr).documentation?
  58. rescue
  59. false
  60. end
  61. end
  62. def ipv6_relay?
  63. exist_in_pool?(IPV6_RELAY)
  64. end
  65. def self.ipv6_relay?(addr)
  66. begin
  67. new(addr).ipv6_relay?
  68. rescue
  69. false
  70. end
  71. end
  72. def benchmark?
  73. exist_in_pool?(BENCHMARK)
  74. end
  75. def self.benchmark?(addr)
  76. begin
  77. new(addr).benchmark?
  78. rescue
  79. false
  80. end
  81. end
  82. def multicast?
  83. exist_in_pool?(MULTICAST)
  84. end
  85. def self.multicast?(addr)
  86. begin
  87. new(addr).multicast?
  88. rescue
  89. false
  90. end
  91. end
  92. def internet_routable?
  93. !reserved? &&
  94. !private? &&
  95. !loopback? &&
  96. !link_local? &&
  97. !documentation? &&
  98. !ipv6_relay? &&
  99. !benchmark? &&
  100. !multicast?
  101. end
  102. def self.internet_routable?(addr)
  103. is?(to_s) && new(addr).internet_routable?
  104. end
  105. def self.is?(addr)
  106. begin
  107. IPAddr.new(addr)
  108. true
  109. rescue
  110. false
  111. end
  112. end
  113. private
  114. def exist_in_pool?(collection)
  115. collection.collect do |address_scope|
  116. return true if IPAddr.new(address_scope).include?(self)
  117. end
  118. false
  119. end
  120. end