簡體   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