import pandas as pd
import ipaddress
import streamlit as st
class compute:
def __init__(self):
st.title(':red[Welcome] :sunglasses:') # 创建title,可以链接
self.iplist_ipv4 = []
self.iplist_ipv6 = []
self.iplist_ipv4_subnet = []
self.iplist_ipv6_subnet = []
def ipv4(self):
st.sidebar.header(":red[IP计算器]")
net4 = st.sidebar.text_input("请输入ipv4地址",help="示例:1.1.1.1/24") # 网页上新建输入窗口
try:
net4_result = ipaddress.IPv4Network(net4, strict=False)
series_ipv4 = [net4_result.with_prefixlen,net4_result.with_hostmask ,str(net4_result[1]) + str("--") + str(net4_result[-2])]
self.df_ipv4 = pd.DataFrame({"ipv4信息": series_ipv4}, index=["网络地址", "反码地址", "可用地址"])
st.dataframe(self.df_ipv4, width=500)
# 子网划分
choose = st.sidebar.checkbox("是否进行ipv4子网划分")
# st.write(net4_result.prefixlen)
if choose == True:
cidr = st.sidebar.number_input("请选择划分的ipv4子网", min_value=1, max_value=31)
if cidr - net4_result.prefixlen < 15:
base_prefix = "/" + str(cidr)
num_cidr_ipv4 = 2 ** (32 - int(cidr))
all_host_number = net4_result.num_addresses # 获取所有ip地址的数量
for num in range(0, all_host_number // num_cidr_ipv4):
self.iplist_ipv4_subnet.append(str(net4_result[num_cidr_ipv4*num]) + base_prefix)
st.write(":red[ipv4子网详情如下]")
df_ipv4 = pd.DataFrame(data=self.iplist_ipv4_subnet, columns=["子网划分结果"])
#st.write(self.iplist_ipv4_subnet)
st.dataframe(df_ipv4,width=500)
else:
st.write(":red[子网数量过大]")
else:
pass
except ValueError:
pass
# st.sidebar.caption(":red[框框里头要正确的地址]:sob:")
except IndexError:
st.sidebar.caption(":red[No Prefix] :sob:")
def ipv6(self):
net6 = st.sidebar.text_input("请输入ipv6地址",help="示例:fe::/120")
try:
net6_result = ipaddress.IPv6Network(net6, strict=False)
series_ipv6 = [net6_result.with_prefixlen, net6_result.with_hostmask, str(net6_result[1]) + str("--") + str(net6_result[-1])]
self.df_ipv6 = pd.DataFrame({"ipv6信息": series_ipv6}, index=["网络地址", "反码地址", "可用地址"])
st.dataframe(self.df_ipv6, width=500)
# ipv6子网划分
choose_ipv6 = st.sidebar.checkbox("是否进行ipv6子网划分")
# st.write(choose)
if choose_ipv6 == True:
cidr_ipv6 = st.sidebar.number_input("请选择划分的ipv6子网",min_value=1,max_value=127)
if cidr_ipv6 - net6_result.prefixlen < 15:
base_prefix = "/" + str(cidr_ipv6)
num_cidr_ipv6 = 2 ** (128 - int(cidr_ipv6))
all_host_number_ipv6 = net6_result.num_addresses
for num in range(0, all_host_number_ipv6 // num_cidr_ipv6):
self.iplist_ipv6_subnet.append(str(net6_result[num_cidr_ipv6 * num]) + base_prefix)
st.write(":red[ipv6子网详情如下]")
df_ipv6 = pd.DataFrame(data=self.iplist_ipv6_subnet,columns=["子网划分结果"])
st.dataframe(data=df_ipv6,width=500)
#st.write(self.iplist_ipv6_subnet)
else:
st.write(":red[子网数量过大]")
else:
pass
except ValueError:
pass
#st.sidebar.caption(":red[框框里头要正确的地址] :sob:")
except IndexError:
st.sidebar.caption(":red[No Prefix] :sob:")
# st.header(":red[No IP Address] :sob:")
yc = compute()
yc.ipv4()
yc.ipv6()