這里只列出當前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