import os
def octToBin(oct):
x = bin(int(oct))[2:]
for i in range(8-len(x)):
x = f"0{x}"
return x
def addToStart(ip, num):
for i in range(32-len(ip)):
ip = f"{num}{ip}"
return ip
def addToEnd(ip, num):
for i in range(32-len(ip)):
ip = f"{ip}{num}"
return ip
def IPtoBin(ip):
Bin = ""
for oct in ip.split("."):
Bin += f"{octToBin(oct)}"
Bin = Bin[:35]
return Bin
def IPbinToDec(ip):
binIP = ""
for oct in ip.split("."):
x = oct.replace(".", "")
num = int(x, base=2)
binIP += f"{num}."
return binIP[:-1]
def maskaAdres(mask):
maska = ""
for i in range(0, mask):
maska += "1"
for i in range(0, 32-mask):
maska += "0"
maska = binToIP(maska)
return maska
def binToIP(bin):
return f"{bin[0:8]}.{bin[8:16]}.{bin[16:24]}.{bin[24:32]}"
def fullPrint(name, ip):
print(f"{name}\t{ip}\t{binToIP(IPtoBin(ip))}")
# Driver Code
if __name__ == '__main__':
print("\nPodaj adres podsieci: ")
print("np.: 192.168.1.0/24 \n")
net = input()
print("Podaj liczbę hostów: ")
hosts = input()
ip = net.split("/")[0]
try:
mask = int(net.split("/")[1])
except:
mask = 32
hostsMax = 0
while (int(hosts) > hostsMax and mask > 0 and mask <= 32):
mask -= 1
hostsMax = pow(2, 32-mask)-2
hostsMax = pow(2, 32-mask)-2
if int(hosts) <= int(hostsMax):
fullPrint("\nadres IP", ip)
maska = maskaAdres(mask)
fullPrint(f"maska /{mask}", IPbinToDec(maska))
binIP = ""
for oct in ip.split("."):
x = octToBin(oct)
binIP += x
siec = binIP[:mask]
hosty = binIP[mask:]
adresSieci = binToIP(addToEnd(siec, "0"))
fullPrint(f"adres sieci ", IPbinToDec(adresSieci))
broadcast = binToIP(addToEnd(siec, "1"))
fullPrint(f"broadcast ", IPbinToDec(broadcast))
print("Maksymalna liczba hostów: ", hostsMax)
firstHost = addToEnd(siec, "0")[:-1]
fullPrint(f"host min ", IPbinToDec(binToIP(f"{firstHost}1")))
lastHost = addToEnd(siec, "1")[:-1]
fullPrint(f"host max ", IPbinToDec(binToIP(f"{lastHost}0")))
else:
if (mask == 0):
print("Tyle adresów nie zmieści się w żadnej podsieci")
else:
print(
f"Tyle adresów nie zmieści się w tej podsieci, należy zmniejszyć maskę przynajmniej do {mask}")
os.system("pause")