IP 地址处理模块IPy

介绍

IP 地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的 IP 地址,包括网段、网络掩码、广播地址、子网数、IP 类型等。
Python 提供了一个强大的第三方模块IPy (htps://github.com/haypo/python-ipy/),最新版本为 V1.0.1。

安装

  • 源码方式安装
$ 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 安装
pip install IPy

方法:

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

基本操作

  1. 基本方法
#查看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转换等
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和掩码生成网段格式
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参数值一定值不同输出类型的网段

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 地址和网段是否包含于另一个网段中

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 类型等信息。

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 等

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IPy是一个Python支持IP的各种操作的第三方模块。可以通过使用pip安装IPy模块来使用它,安装命令是 pip install IPyIPy模块提供了很多功能,其中一个是通过使用version方法来区分IP地址的版本。可以使用IPy.IP().version()方法来查看一个IP地址的版本。比如,IPy.IP('10.0.0.0/8').version()会返回4,而IPy.IP('::1').version()会返回6。 在完成主机扫描的过程中,IPy模块也经常被使用来生成IP地址池。可以使用IPy库来定义一个函数来生成IP地址池,比如makeIpPool函数。这个函数接受起始IP地址和结束IP地址作为参数,然后使用IPy.IP()和IPy.intToIp()方法来将IP地址转换为整型格式并生成IP地址池。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [一文掌握使用PythonIP处理模块IPy](https://blog.csdn.net/qq_27071221/article/details/124987012)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [python学习—— IPy 强大的IP地址解析模块](https://blog.csdn.net/qq_40909772/article/details/90767800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值