python實(shí)現(xiàn)網(wǎng)絡(luò)子網(wǎng)劃分

不說廢話剃浇,歡迎留言交流唇礁,給我打賞我也不介意嗷杖们!



def str_bin_to_normal(str_bin_ip):
    return '.'.join([str(int('0b'+i,base=2)) for i in [str_bin_ip[0:8], str_bin_ip[8:16], str_bin_ip[16:24], str_bin_ip[24:32]]])


def main():
    choice = input("1.計算子網(wǎng)范圍和可用主機(jī)數(shù)\n2.判斷兩個ip地址是否屬于同一網(wǎng)段\n請選擇操作(按1或2萝招,回車):")
    if choice == '1':
        net_lst, ori_mask = input("請輸入網(wǎng)段(形式:x.x.x.x/x):").split('/')
        subnet_num = int(input("請輸入子網(wǎng)數(shù):"))
        net_str_bin = "".join([bin(x).lstrip('0b').rjust(8,'0') for x in [ int(i) for i in net_lst.split(".")]])   # 二進(jìn)制字符串ip.
        #"".join([bin(x).lstrip('0b').rjust(8,'0') for x in [ int(i) for i in  net_lst.split(".")]]) 將IP地址轉(zhuǎn)化為二進(jìn)制字符串
        org_mask_str_bin = '1'*int(ori_mask)+'0'*(32-int(ori_mask))
        # print("用戶輸入的網(wǎng)絡(luò)地址:",net_str_bin)
        # print("用戶輸入的地址掩碼:",org_mask_str_bin)

        x = []
        for i in range(0, 32):
            tmp = int(net_str_bin[i]) & int(org_mask_str_bin[i])
            x.append(str(tmp))
        net_base_str_bin = ''.join(x)
        # print("計算出來的網(wǎng)絡(luò)地址:",net_base_str_bin)

        # 這里計算需要借用幾個主機(jī)位
        i = 0
        while subnet_num > 2 ** i:
            i += 1
        len_of_subnet = i
        # print("需要借用的主機(jī)位數(shù):", len_of_subnet)

        new_mask = '1'*(int(ori_mask)+len_of_subnet) +'0'*(32-int(ori_mask)-len_of_subnet)
        # print("計算得出新子網(wǎng)掩碼:",new_mask)

        # 計算子網(wǎng)的起始地址段衔瓮,其實(shí)就是計算出來的網(wǎng)絡(luò)地址net_base_str_bin,將其轉(zhuǎn)化為正常的ip地址顯示
        sub_net_start_bin = net_base_str_bin
        # 計算子網(wǎng)的末尾地址端:計算出來的網(wǎng)絡(luò)地址的前ori_mask位+借用主機(jī)位全1+主機(jī)位全0
        sub_net_end_bin = net_base_str_bin[0:int(ori_mask)] + '1'*len_of_subnet + '0'*(32-int(ori_mask)-len_of_subnet)
        # 計算主機(jī)可用ip數(shù)量
        host_allow_num = (2 ** (32 - int(ori_mask) - len_of_subnet) - 2) * 2 ** len_of_subnet
        if 2**len_of_subnet < subnet_num or host_allow_num <= 0:
            print("該網(wǎng)段不允許劃分這么多子網(wǎng)!")
            return

        print('=========================================')
        print("計算出子網(wǎng)開始地址:",str_bin_to_normal(sub_net_start_bin)+'/{}'.format(int(ori_mask)+len_of_subnet))
        print("計算出子網(wǎng)結(jié)束地址:", str_bin_to_normal(sub_net_end_bin)+'/{}'.format(int(ori_mask)+len_of_subnet))

        print("可用的主機(jī)地址數(shù)量:",host_allow_num)

    elif choice == '2':
        ip1, mask1 = input("請輸入第一個IP地址(形式:x.x.x.x/x):").split('/')
        ip2, mask2 = input("請輸入第二個IP地址(形式:x.x.x.x/x):").split('/')
        net_str_bin_ip1 = "".join([bin(x).lstrip('0b').rjust(8, '0') for x in [int(i) for i in ip1.split(".")]])
        org_mask_str_bin_ip1 = '1' * int(mask1) + '0' * (32 - int(mask1))

        x1 = []
        for i in range(0, 32):
            tmp = int(net_str_bin_ip1[i]) & int(org_mask_str_bin_ip1[i])
            x1.append(str(tmp))
        net_base_str_bin1 = ''.join(x1)

        net_str_bin_ip2 = "".join([bin(x).lstrip('0b').rjust(8, '0') for x in [int(i) for i in ip2.split(".")]])
        org_mask_str_bin_ip2 = '1' * int(mask2) + '0' * (32 - int(mask2))

        x2 = []
        for i in range(0, 32):
            tmp = int(net_str_bin_ip2[i]) & int(org_mask_str_bin_ip2[i])
            x2.append(str(tmp))
        net_base_str_bin2 = ''.join(x2)
        print('=========================================')
        if net_base_str_bin1 == net_base_str_bin2:
            print("他們屬于同一個網(wǎng)段:",str_bin_to_normal(net_base_str_bin1)+'/{}'.format(mask1))
        else:
            print("他們不屬于同一個網(wǎng)段")
    else:
        print("請輸入1或者2")


if __name__ == "__main__":
    main()


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阶冈,一起剝皮案震驚了整個濱河市闷尿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌女坑,老刑警劉巖填具,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異匆骗,居然都是意外死亡劳景,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門碉就,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盟广,“玉大人,你說我怎么就攤上這事铝噩『饴欤” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵骏庸,是天一觀的道長毛甲。 經(jīng)常有香客問我,道長具被,這世上最難降的妖魔是什么玻募? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮一姿,結(jié)果婚禮上七咧,老公的妹妹穿的比我還像新娘。我一直安慰自己叮叹,他們只是感情好艾栋,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛉顽,像睡著了一般蝗砾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上携冤,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天悼粮,我揣著相機(jī)與錄音,去河邊找鬼曾棕。 笑死扣猫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翘地。 我是一名探鬼主播申尤,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼癌幕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瀑凝?” 一聲冷哼從身側(cè)響起序芦,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粤咪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渴杆,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寥枝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了磁奖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囊拜。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖比搭,靈堂內(nèi)的尸體忽然破棺而出冠跷,到底是詐尸還是另有隱情,我是刑警寧澤身诺,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布蜜托,位于F島的核電站,受9級特大地震影響霉赡,放射性物質(zhì)發(fā)生泄漏橄务。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一穴亏、第九天 我趴在偏房一處隱蔽的房頂上張望蜂挪。 院中可真熱鬧,春花似錦嗓化、人聲如沸棠涮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽严肪。三九已至,卻和暖如春隅津,著一層夾襖步出監(jiān)牢的瞬間诬垂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工伦仍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留结窘,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓充蓝,卻偏偏與公主長得像隧枫,于是被迫代替她去往敵國和親喉磁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容