IP 地址处理模块IPy

IP 地址处理模块IPy

介绍

IP 地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的 IP 地址,包括网段、网络掩码、广播地址、子网数、IP 类型等。

Python 提供了一个强大的第三方模块IPy (htps://github.com/haypo/python-ipy/),最新版本为 V1.0.1。

安装

  • 源码方式安装
bash 复制代码
$ wget https://pypi.python.org/packages/source/I/IPy/IPy-1.01.tar.gz --no-check-certificate
$ tar zxvf IPy-1.01.tar.gz
$ cd IPy-1.01/
$ sudo python setup.py install
  • pip 安装
bash 复制代码
pip install IPy

方法:

  • 识别IP 分类
    version()
  • 获取IP 数量
    len()

基本操作

  1. 基本方法
python 复制代码
#查看IPV4还是IPV6
from IPy import IP

ip = IP('127.0.0.0/30')
print(ip.len()) 							# 输出192.168.0.0/16 网段的 ip 个数
for x in ip:								# 输出该网段的所有Ip清单
	print(x)
print(ip.version())
  1. 反向解析名称、IP 类型、IP转换等
python 复制代码
from IPy inport IP
ip = IP('192.168.1.20')
print(ip.reverseNames())
print(ip.iptype())							# IP类型为私网段
print(ip.broadcast())						# 广播地址
print(ip.get_mac())							# mac地址
print(ip.int())								# 转换为整数形式
print(ip.strBin())							# 转换为二进制
  1. 网络地址转换,根据IP和掩码生成网段格式
python 复制代码
print(IP('192.168.1.0').make_net('255.255.255.0'))
print(IP('192.168.1.0/255.255.255.0',make_net=True))
print(IP('192.168.1.0-192.168.1.255',make_net=True))

也可以通过strNormal 方法指定不同的wantprefixlen参数值一定值不同输出类型的网段

python 复制代码
print(IP("192.168.1.0/24").strNormal(0))
print(IP("192.168.1.0/24").strNormal(1))
print(IP("192.168.1.0/24").strNormal(2))
print(IP("192.168.1.0/24").strNormal(3))	

wantprefixlen参数值含义:

wantprefixlen = 0,无返回

wantprefixlen = 1,prefix格式

wantprefixlen = 2,decimalnetmast格式,如 192.168.1.0/255.255.255.0

wantprefixlen = 3,IastIP 格式,如 192.168.1.0-192.168.1.255

多网络计算方法

比较两个网段是否存在包含,重叠等关系。用><等来比较大小关系,用In判断是否包含,用 prefixlen 判断是否重叠。

判断 IP 地址和网段是否包含于另一个网段中

python 复制代码
print(IP('10.0.0.0/24') < IP('12.0.0.0/24'))
print('192.168.1.100' in IP('192.168.1.0/24'))
print(IP('192.168.1.0/24') in IP('192.168.0.0/16'))
print(IP('192.168.0.0/23').overlaps('192.168.1.0/24'))	#判断两个网段是否重叠
print(IP('192.168.1.0/24' ).overlaps('192.168.2.0/24'))

判断两个网段是否存在重叠,采用IPy 提供的 overlaps 方法,如:
>>>IP('192.168.0.0/23').overlaps('192.168,1.0/24')
1	#返回1代表存在重受
>>>IP('192.168.1.0/24 ).overlaps('192.168.2.0')
0	#返回 0代表不存在重受

示例

根据输入的 IP 或子网返回网络、掩码、广播、反向解析、子网数、IP 类型等信息。

python 复制代码
from IPy import IP

ip_s = input('Please input an IP or net-range:' )	## 接收用户输入,参数为IP地址或网段地址
ips = IP(ip_s)
if len(ips) > 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())    				# 输出十六进制地址
    print("binary ip: %s" % ips.strBin())       			# 输出二进制地址
    print('iptype:%s' % ips.iptype())           			# 输出地址类型,如 PRIVATE、PUBLIC、LOOPBACK 等
相关推荐
笨鸟先飞,勤能补拙4 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能5 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂5 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study6 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境7 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境7 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1237 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102167 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb008 小时前
一个项目带你入门AI应用开发01
python
0566468 小时前
Python康复训练——常用标准库
开发语言·python·学习