用于处理 IPv4 和 IPv6 地址和网络的类和工具
IPy - 用于处理 IPv4 和 IPv6 地址和网络的类和工具
- #! /env python3
- #coding=utf-8
- # 使用 pip install IPy, 最新版本为 0.83
- '''IP 地址网段的基本处理'''
- import IPy
- from IPy import IP # 调用 IP
- ip_v4 = IP('192.168.1.0/24').version() # 判断 ipv4 地址段的类型
- ip_v6 = IP('::1').version() # 判断 ipv6 地址段的类型
- print (ip_v4)
- print (ip_v6)
- ip = IP('192.168.1.0/24') # 输入 192.168.1.0/24 网段
- print (ip.len()) #192.168.1.0/24 的网段的 IP 个数
- for x in ip:
- print (x) # 输出 192.168.1.0/24 网段所有的 ip 清单
''''解析名称 IP 类型 IP 转换等'''
- ip_adr = IP('192.168.1.20')
- print (ip_adr.reverseNames()) # 反向解析地址格式
- ip_adr_type = IP('8.8.8.8').iptype() # 判断 8.8.8.8 为公网地址还是私网地址
- print (ip_adr_type)
- ip_adr_int = IP('8.8.8.8').int() # 将地址转换为整数形式
- ip_adr_hex = IP('8.8.8.8').strHex() # 转换为 16 进制格式
- ip_adr_bin = IP('8.8.8.8').strBin() # 转换为二进制格式
- print (ip_adr_int)
- print (ip_adr_hex)
- print (ip_adr_bin)
- '''网络地址转换, 例如根据 IP 与掩码生产网段格式'''
- ip_net = IP('192.168.1.0')
- print (ip_net.make_net('255.255.255.0')) # 获取 192.168.1.0 与掩码 255.255.255.0 计算, CDR 格式, 192.168.1.0/24
- print (IP('192.168.1.0/255.255.255.0',make_net=True)) # 将 192.168.1.0/255.255.255.0 地址格式转换为 192.168.1.0/24
- print (IP('192.168.1.0-192.168.1.255',make_net=True)) # 将 192.168.1.0-192.168.1.255 地址段转换为 192.168.1.0/24 格式
- '''通过 strNormal 方法指定不同 wanprefixlen 参数以制定不同的输出类型网络输出类型为字符串'''
- print ((IP('192.168.1.0/24')).strNormal(0)) #wanltprefixlen=0, 无返回, 例如 192.168.1.0
- print ((IP('192.168.1.0/24')).strNormal(1)) #wanltprefixlen=1,prefix 格式, 如 192.168.1.0/24
- print ((IP('192.168.1.0/24')).strNormal(2)) #wanltprefixlen=2,decimalnetmask 格式, 如 192.168.1.0/255.255.255.0;
- print ((IP('192.168.1.0/24')).strNormal(3)) #wanltprefixlen=3,lastIP 格式, 如 192.168.1.0-192.168.1.255
- '''多网络计算方法'''
- IP('10.0.0.0/24') < IP('12.0.0.0/24')# 判断 10.0.0.0/24 网段小于 12.0.0.0/24, 输出结果为 TRUE
- IP('192.168.1.100') in IP('192.168.1.0/24')# 判断 192.168.1.100 地址是否在 192.168.1.0/24 网段中, 输出结果为 TRUE
- '''判断两个网段是否存在存在重叠, 采用 IPy 提供的 overlaps 方法'''
- IP('192.168.0.0/23').overlaps('192.168.1.0/24') # 返回值为 1, 代为为重叠
- IP('192.168.1.0/24').overlaps('192.168.2.0') # 返回值为 0, 代表为不存在重叠
根据输入的 IP 或者子网返回网络掩码广播反向解析, 子网数等信息输出结果
- #! /env python3
- #coding=utf-8
- '''根据输入的 IP 或者子网返回网络, 掩码, 广播, 方向解析, 子网数, ip 类型等信息'''
- from IPy import IP
- ip_s = input('Please input an IP or net-range:') # 接收用户输入, 参数为 IP 地址或者网络地址
- ips = IP(ip_s)
- if len(ips) > 1: # 为 1 个网络地址
- print('net: %s' % ips.net()) # 输出网络地址
- print('netmask: %s' % ips.netmask()) # 输出网络掩码地址
- print('broadcast: %s' % ips.broadcast()) # 输出网络广播地址
- print('reverse address: %s' % ips.reverseNames()[0]) # 输出地址反向解析
- print('subnet: %s' % len(ips)) # 输出网络子网数
- else: # 为单个 IP 地址
- print('reverse address: %s' % ips.reverseNames()[0]) # 输出 IP 反向解析
- print('hexadecimal: %s' % ips.strHex()) #16 进制地址格式
- print('binary ip: %s' % ips.strBin()) # 二进制地址格式
- print('iptype: %s' % ips.iptype()) # 输出地址类型, 为公网还是私网
来源: http://www.bubuko.com/infodetail-2530905.html