繁体   English   中英

从 ip 和掩码获取广播地址和网络地址

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM