python3 獲取當前網絡子網ip


這里只列出當前ip所對應的子網網段

# -*- coding: utf-8 -*-

import os
import re
import platform

if platform.system() == "Windows":
    ipconfig = os.popen("chcp 65001&&ipconfig").read()
    res = re.findall('IPv4 Address.*?: (.*?)\n.*?Subnet Mask.*?: (.*?)\n', ipconfig)
else:
    ifconfig=os.popen("ifconfig").read()
    res = re.findall('inet (.*?)  netmask (.*?) ', ifconfig)

ip, netmask = res[0]

def get_ip_addrs(ip, netmask):
    print("IP:", ip)
    print("掩碼:", netmask)
    # ip、netmask十進制轉換二進制
    ips = [bin(int(i))[2:].zfill(8) for i in ip.split(".")]
    masks = [bin(int(i))[2:].zfill(8) for i in netmask.split(".")]

    # 根據ip地址和掩碼地址計算網絡號
    network_name = [[], [], [], []]
    for index, (i,m) in enumerate(zip(ips, masks)):
        for ip_i, mask_m in zip(i,m):
            network_name[index].append(str(int(ip_i)&int(mask_m)))

    # 網絡號二進制轉換十進制
    network_name = [str(int('0b'+''.join(i), base=2)) for i in network_name]
    print("網絡號:", ".".join(network_name))

    # 計算主機號
    host_number = "".join(masks)
    host_number = 32 - host_number.index('0')
    print("主機號:", host_number)

    # 計算主機數
    addr_count = 2**host_number-2
    print("主機數:", addr_count)
    print("廣播地址:", ".".join(network_name[:-1])+"."+str(addr_count+1))

    # 根據網絡號和主機數確定子網ip
    ip_addrs = [network_name[:-1]+[str(i)] for i in range(int(network_name[-1]) + 1, addr_count+1)]
    ip_addrs = [".".join(i) for i in ip_addrs]
    print("可用地址:", ip_addrs[0], "~", ip_addrs[-1])
    return ip_addrs

ip_addrs = get_ip_addrs(ip, netmask)

輸出

IP: 192.168.1.107
掩碼: 255.255.255.0
網絡號: 192.168.1.0
主機號: 8
主機數: 254
廣播地址: 192.168.1.255
可用地址: 192.168.1.1 ~ 192.168.1.254


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM