class IPv4:
ip = ""
integer = 0
end = 0
def __init__(self, address =0):
if isinstance(address, int):
self.integer = address
self.ip = self.toString(address)
if isinstance(address, str):
self.ip = address
self.integer = self.toInteger(address)
def toString(self, integer:int):
return f'{(integer>>24)&0xff}.{(integer>>16)&0xff}.{(integer>>8)&0xff}.{(integer>>0)&0xff}'
def toInteger(self, address:str="0.0.0.0"):
"""[summary]
[description]
Arguments:
address {[type]} -- [description]
Returns:
[type] -- [description]
"""
ipNumber = 0
partIp = address.split('.')
i = 0
for x in partIp:
ipNumber = ipNumber + int(x)*(0x100**(3-i))
i = i+1
return ipNumber
def range(self, start: int = 0, end: int = 0, ipType=""):
self.end = end
IPRange = {
"A": ["0.0.0.0", "127.255.255.255"],
"B": ["128.0.0.0", "191.255.255.255"],
"C": ["192.0.0.0", "223.255.255.255"],
"D": ["224.0.0.0", "239.255.255.255"],
"E": ["240.0.0.0", "247.255.255.255"]
}
this = self
class IpRangeIter:
def __iter__(self):
self.count = start
return self
def __next__(self):
if(ipType == 'A'):
this.integer = this.toInteger(IPRange['A'][0])
this.end = this.toInteger(IPRange['A'][1])
elif(ipType == 'B'):
this.integer = this.toInteger(IPRange['B'][0])
this.end = this.toInteger(IPRange['B'][1])
elif(ipType == 'C'):
this.integer = this.toInteger(IPRange['C'][0])
this.end = this.toInteger(IPRange['C'][1])
elif(ipType == 'D'):
this.integer = this.toInteger(IPRange['D'][0])
this.end = this.toInteger(IPRange['D'][1])
elif(ipType == 'E'):
this.integer = this.toInteger(IPRange['E'][0])
this.end = this.toInteger(IPRange['E'][1])
if(self.count < this.end):
integervalue = this.integer + self.count
val = this.toString(integervalue)
self.count += 1
return (val, integervalue)
else:
raise StopIteration()
return iter(IpRangeIter())