IPy
IPy模块包含IP类,使用它可以方便处理绝大部分格式为IPv6及IPv4的网络和地址。
比如通过 version 方法就可以区分出IPv4与IPv6,如:
>>>IP('10.0.0.0/8).version()
4#4代表IPv4类型
>>>IP('::1).version()
6#6代表IPv6类型
#===========================
import IPy
IP01 = IPy.IP('127.0.0.0/8').version()
print(IP01) # 4代表IPv4类型
[IPY模块IP记录_珊子的木瓜的技术博客_51CTO博客](https://blog.51cto.com/xiaoshanzi/2119026#:~:text=pip install ipy from IPy import IP print,(IP (‘%3A%3A1’).version ()) print (IP (‘192.168.0.0%2F16’).len ()) %23查看指定的ip段可使用的ip数)
多网络计算方法详解
- 有时候我们想比较两个网段是否存在包含、重叠等关系,比如同网络但不同prefixlen 会认为是不相等的网段,如【10.0.0.0/16 不等于 10.0.0.0/24】
- 另外即使具有相同的prefixlen 但处于不同的网络地址,同样也视为不相等,如 10.0.0.0/16 不等于 192.0.0.0/16。
- IPy 支持类似于数值型数据的比较,以帮助IP 对象进行比较
实战:
1、演示常用IP功能
import IPy
IP01 = IPy.IP('127.0.0.0/8').version()
print(IP01) # 4代表IPv4类型
IP02 = IPy.IP('::1').version()
print(IP02)
IP03 = IPy.IP('fe80::7b3e:6a86:8712:eb46').version()
print(IP03)
2、多网络计算
from IPy import IP
var01 = IP('10.0.0.0/24')
# 计算,网络后一共32位,32-24=8,8^2=256
print(var01.len()) # 可以产生IP地址数量
print(var01)
# 打印相关IP地址,即打出10.0.0.0/24下所有的IP地址
for x in var01:
print(x)
print('==================')
# 切近实际,将
var02 = IP('192.168.88.88/31')
for x in var02:
print(x)
print('==================')
# 查看网络是否有重叠,A是否在B中
from IPy import IP
# /16前两个网络号,后两个代表某一台机器
print('192.168.13.249 ' in IP('192.168.0.0/16'))
# /24 则代表前三个是网络号,后一个代表某台机器
print('192.168.13.249 ' in IP('192.168.0.0/24'))
#用户输入信息
ip_s = input('Input ip address:')
# 192.168.13.0/24 192.168.88.0
ips = IP(ip_s)
if len(ips) > 1: # 是一个网络号,代表不止一个IP
print(ips.net()) # 输出网络
print(ips.broadcast()) # 输出网络地址
print(ips.netmask()) # 子网掩码
print(len(ips)) # IP地址个数
else: # 长度只有1,一个IP
print(ips) # 输出本身
print(ips.strBin()) # 输出二进制格式
3、网络监测
from IPy import IP
while 1:
ip_s = input('Input IP Address:')
ip = IP(ip_s)
print(ip.iptype())
# PRIVATE 私有地址
# 常见的私有地址192.168.X.X 10.X.X.X
# 常见的公有地址 172.X.X.X