Skip to content

Instantly share code, notes, and snippets.

@mejibyte
Created October 12, 2012 23:58
Show Gist options
  • Save mejibyte/3882412 to your computer and use it in GitHub Desktop.
Save mejibyte/3882412 to your computer and use it in GitHub Desktop.
module Midterm
class << self
def ip_to_int(some_ip)
parts = some_ip.split(".").map(&:to_i)
(parts[0] << 24) + (parts[1] << 16) + (parts[2] << 8) + parts[3]
end
def int_to_ip(some_int)
parts = Array.new(4)
parts[0] = (some_int & (0xff << 24)) >> 24
parts[1] = (some_int & (0xff << 16)) >> 16
parts[2] = (some_int & (0xff << 8)) >> 8
parts[3] = (some_int & (0xff << 0)) >> 0
parts.map(&:to_s).join(".")
end
def mask(size)
("1" * size).ljust(32, "0").to_i(2)
end
end
end
module NumberHelpers
def to_ip
Midterm::int_to_ip(self)
end
def to_mask
Midterm::mask(self)
end
end
class Fixnum
include NumberHelpers
end
class Bignum
include NumberHelpers
end
class String
def to_integer
Midterm::ip_to_int(self)
end
end
def net(ip, mask)
(ip & mask).to_ip
end
def broadcast(ip, mask)
(ip | ~mask).to_ip
end
@mejibyte
Copy link
Author

Usage:

("192.168.13.5".to_integer & 28.to_mask).to_ip

@jfelipe
Copy link

jfelipe commented Oct 13, 2012

Dir Red = IP & Mascara por default
Dir Subred = IP & Mask dada
Broadcast Red = OR con mascara default pero negada
Broadcast Subred = OR con máscara dado pero negada

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment