[英]Get broadcast adrdess and network address from an ip and mask
我的任务是获取广播地址和网络地址,但我必须使用用户提供的子网掩码值和 ip。 我不能包含导入或导入,所以我可以更改最后的元素并添加点,它不应该很复杂,因为我是初学者。 我是对的:
adressIP = (input("Enter a IP adress: "))
subnetMask = (input("Enter a subnet mask: "))
valueIntSubnetMask = subnetMask[1:]
convertedBinaryValue = ""
for d in adressIP.split("."):
b = bin(int(d))[2:].zfill(8)
convertedBinaryValue = convertedBinaryValue + b + "."
convertedBinaryValue = convertedBinaryValue[:-1]
maxIP = valueIntSubnetMask : 32].replace()
minIP = ""
for
一些如何实现它的例子,但任何实现都应该遵循先将字符串转换为 32 位整数,然后通过按位运算计算网络/广播地址,然后再转换回字符串的原则。
from functools import reduce
ipAddressStr = "192.168.1.244"
subnetMaskStr = "255.255.255.128"
ipAddressBin = reduce(lambda i,s: i<<8 | int(s), ipAddressStr.split("."), 0)
subnetMaskBin = reduce(lambda i,s: i<<8 | int(s), subnetMaskStr.split("."), 0)
networkAddressBin = ipAddressBin & subnetMaskBin
broadcastAddressBin = ipAddressBin | (subnetMaskBin ^ (1<<32)-1)
networkAddressStr = ".".join([str(networkAddressBin>>(8*i)&255) for i in range(3,-1,-1)])
broadcastAddressStr = ".".join([str(broadcastAddressBin>>(8*i)&255) for i in range(3,-1,-1)])
print(networkAddressStr)
print(broadcastAddressStr)
当然,这也可以通过定义转换函数来写得更详细:
def ipStrToBin(addrStr):
addrBin = 0
for octet in addrStr.split("."):
addrBin = addrBin << 8 | int(octet)
return addrBin
def ipBinToStr(addrBin):
octetsStr = []
for i in range(4):
octetsStr.append(str(addrBin>>(8*(3-i))&255))
return ".".join(octetsStr)
ipAddressStr = "192.168.1.244"
subnetMaskStr = "255.255.255.128"
ipAddressBin = ipStrToBin(ipAddressStr)
subnetMaskBin = ipStrToBin(subnetMaskStr)
networkAddressBin = ipAddressBin & subnetMaskBin
broadcastAddressBin = ipAddressBin | (subnetMaskBin ^ (1<<32)-1)
networkAddressStr = ipBinToStr(networkAddressBin)
broadcastAddressStr = ipBinToStr(broadcastAddressBin)
print(networkAddressStr)
print(broadcastAddressStr)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.