第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何檢查給定的IP地址范圍只包含一個(gè)CIDR?

如何檢查給定的IP地址范圍只包含一個(gè)CIDR?

幕布斯6054654 2023-07-11 15:29:29
我試圖編寫一個(gè)Python腳本將兩個(gè)IP地址之間的范圍轉(zhuǎn)換為CIDR,# cidr.pyimport argparseimport netaddrimport sysparser = argparse.ArgumentParser()parser.add_argument('start_addr')parser.add_argument('end_addr')args = parser.parse_args()start_addr = netaddr.IPAddress(args.start_addr)end_addr = netaddr.IPAddress(args.end_addr)if end_addr < start_addr:  print('start address is larger than end address. check arguments.')  sys.exit()ip_cidr = netaddr.iprange_to_cidrs(start_addr, end_addr)print(str(ip_cidr))例如,使用Salesforce 的 IP 地址范圍作為參數(shù)執(zhí)行此腳本,它會(huì)返回正確的 CIDR 表達(dá)式。$ python cidr.py 13.108.0.0 13.111.255.255[IPNetwork('13.108.0.0/14')]但是當(dāng)我修改第二個(gè)參數(shù)時(shí),它會(huì)返回幾個(gè) CIDR。$ python hoge.py 13.108.0.0 13.211.255.255[IPNetwork('13.108.0.0/14'), IPNetwork('13.112.0.0/12'), IPNetwork('13.128.0.0/10'), IPNetwork('13.192.0.0/12'), IPNetwork('13.208.0.0/14')]我想知道2個(gè)IP地址的地址范圍只包含1個(gè)CIDR表達(dá)式。我該如何檢查?
查看完整描述

1 回答

?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果iprange_to_cidrs始終返回跨越提供的范圍所需的最小 IP 范圍數(shù)(看起來(lái)很可能),那么您只需要測(cè)試它返回的列表的長(zhǎng)度。


但是,如果您不想驗(yàn)證情況是否始終如此,可以使用以下方法。


def ip_to_int(ip):

    return sum(256**i * int(v) for i, v in enumerate(reversed(ip.split('.'))))


def single_cidr(ip1, ip2):

    n1 = ip_to_int(ip1)

    n2 = ip_to_int(ip2)

    xor = n2 ^ n1

    return xor == abs(n2 - n1) and '0' not in bin(xor)[2:]


print(single_cidr('13.108.0.0', '13.111.255.255'))  # True

print(single_cidr('13.108.0.0', '13.211.255.255'))  # False

這里,xor兩個(gè) IP(轉(zhuǎn)換為整數(shù)時(shí))不同的每一位都包含 1。我們希望這個(gè)數(shù)字等于兩個(gè)值之間的差值,并且比 2 的冪小 1,這樣二進(jìn)制中的兩個(gè) IP 地址都以相同的詞干開(kāi)頭,然后一個(gè)全 0,另一個(gè)全 1。


在這部分中,'0' not in bin(xor)[2:]我們使用了這樣一個(gè)事實(shí),即bin初始值之后的輸出0b將從第一個(gè) 1 位開(kāi)始,而不填充任何前導(dǎo)零(例如,對(duì)于 65535 ,它將是'0b11111111'),因此我們只需要測(cè)試初始值之后沒(méi)有 0 0b。


查看完整回答
反對(duì) 回復(fù) 2023-07-11
  • 1 回答
  • 0 關(guān)注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)