Python学习笔记-IP地址处理模块Ipy

IP地址处理模块Ipy

IPy模块可以很好的辅助我们高效完成IP的规划工作。

参考:https://github.com/autocracy/python-ipy

安装IPy模块

[[email protected] ~]# python36 -m easy_install -i http://pypi.douban.com/simple/ IPy

导入模块

In [12]: from IPy import IP

1、IP地址、网段的基本处理

通过version区分IPv4和IPv6:

In [13]: testip = (‘10.0.0.0/8‘,‘::1‘)
In [14]: IP(testip[0]).version()
Out[14]: 4
In [15]: IP(testip[1]).version()
Out[15]: 6

通过指定的网段输出该网段的IP个数及所有IP地址清单:

In [25]: testip1 = IP(‘192.168.1.0/24‘)
In [26]: print (testip1.len())
256
In [27]: for x in testip1:
 ...: print (x)
 ...: 
192.168.1.0
192.168.1.1
192.168.1.2
......

IP类常用方法:

In [32]: testip2 = IP(‘192.168.100.10‘)

In [33]: testip2.reverseNames() #反向解析地址格式
Out[33]: [‘10.100.168.192.in-addr.arpa.‘]

In [34]: testip2.iptype()   #返回IP类型,192.168.100.10为私有地址
Out[34]: ‘PRIVATE‘

In [35]: IP(‘8.8.8.8‘).iptype()   #返回IP类型,8.8.8.8为共有地址
Out[35]: ‘PUBLIC‘

In [36]: testip2.int()  #转换成整型格式
Out[36]: 3232261130

In [37]: testip2.strHex()   #转换成十六进制格式
Out[37]: ‘0xc0a8640a‘

In [38]: testip2.strBin()   #转换成二进制格式
Out[38]: ‘11000000101010000110010000001010‘

In [39]: print (IP(0xc0a8640a))   #十六进制转成IP格式
192.168.100.10

网络地址转换,根据IP与掩码生成网段格式:

In [47]: print (IP(‘192.168.1.0‘).make_net(‘255.255.255.0‘))
192.168.1.0/24
In [48]: print (IP(‘192.168.1.0/255.255.255.0‘,make_net=True))
192.168.1.0/24
In [49]: print (IP(‘192.168.1.0-192.168.1.255‘,make_net=True))
192.168.1.0/24

通过strNormal方法指定不同wantprefixlen参数值以定制不同输出类型的网段。输出类型为字符串:

wantprefixlen取值及含义:

  • wantprefixlen=0,无返回,如192.168.1.0
  • wantprefixlen=1,prefix格式,如192.168.1.0/24
  • wantprefixlen=2,decimalnetmask格式,如192.168.1.0/255.255.255.0
  • wantprefixlen=3,lastIP格式,如192.168.1.0-192.168.1.255
In [52]: IP(‘192.168.1.0/24‘).strNormal(wantprefixlen=0)
Out[52]: ‘192.168.1.0‘
In [53]: IP(‘192.168.1.0/24‘).strNormal(wantprefixlen=1)
Out[53]: ‘192.168.1.0/24‘

#省略wantprefixlen
In [54]: IP(‘192.168.1.0/24‘).strNormal(0)
Out[54]: ‘192.168.1.0‘
In [55]: IP(‘192.168.1.0/24‘).strNormal(1)
Out[55]: ‘192.168.1.0/24‘
In [56]: IP(‘192.168.1.0/24‘).strNormal(2)
Out[56]: ‘192.168.1.0/255.255.255.0‘
In [57]: IP(‘192.168.1.0/24‘).strNormal(3)
Out[57]: ‘192.168.1.0-192.168.1.255‘

2、多网络计算方法

IPy支持类似于数值型数据的比较,以帮助IP对象进行比较

In [67]: IP(‘10.0.0.0/24‘) > IP(‘12.0.0.0/24‘)
Out[67]: False
In [68]: IP(‘10.0.0.0/24‘) < IP(‘12.0.0.0/24‘)
Out[68]: True

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

In [69]: ‘192.168.1.100‘ in IP(‘192.168.1.0/24‘)
Out[69]: True
In [70]: ‘192.168.2.100‘ in IP(‘192.168.1.0/24‘)
Out[70]: False
In [71]: ‘192.168.1.0/24‘ in IP(‘192.168.0.0/16‘)
Out[71]: True

判断两个网段是否存在重叠,采用IPy提供的overlaps方法:

In [74]: IP(‘192.168.0.0/23‘).overlaps(‘192.168.1.0/24‘)
Out[74]: 1  #返回1代表存在重叠
In [75]: IP(‘192.168.1.0/24‘).overlaps(‘192.168.2.0‘)
Out[75]: 0#返回0代表不存在重叠

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

[[email protected] pkg1]# vim testip.py 
#!/usr/bin/python
#coding:utf-8
#
from IPy import IP
import sys 
reload(sys)
sys.setdefaultencoding(‘utf-8‘)
ip_test = raw_input(‘请输入IP地址或网段地址:‘)
ips = IP(ip_test)
if len(ips) > 1:
 print (‘网络地址:%s‘ % ips.net())
 print (‘掩码:%s‘ % ips.netmask())
 print (‘网络广播地址:%s‘ % ips.broadcast())
 print (‘地址反向解析:%s‘ % ips.reverseNames())
 print (‘网络子网数:%s‘ % len(ips))
else:
 print (‘IP反向解析 %s‘ % ips.reverseNames())
print (‘此IP地址转换成十六进制: %s‘ % ips.strHex())
print (‘此IP地址转换成二进制: %s‘ % ips.strBin())
print (‘此IP地址类型: %s‘ % ips.iptype())

执行结果:

[[email protected] pkg1]# python testip.py 
请输入IP地址或网段地址:192.168.1.0/24
网络地址:192.168.1.0
掩码:255.255.255.0
网络广播地址:192.168.1.255
地址反向解析:[‘1.168.192.in-addr.arpa.‘]
网络子网数:256
此IP地址转换成十六进制: 0xc0a80100
此IP地址转换成二进制: 11000000101010000000000100000000
此IP地址类型: PRIVATE

[[email protected] pkg1]# python testip.py 
请输入IP地址或网段地址:192.168.1.1
IP反向解析 [‘1.1.168.192.in-addr.arpa.‘]
此IP地址转换成十六进制: 0xc0a80101
此IP地址转换成二进制: 11000000101010000000000100000001
此IP地址类型: PRIVATE
时间: 2024-08-01 15:56:15

Python学习笔记-IP地址处理模块Ipy的相关文章

ip地址处理模块IPy

下载以及安装: 下载地址:https://pypi.python.org/packages/88/28/79162bfc351a3f1ab44d663ab3f03fb495806fdb592170990a1568ffbf63/IPy-0.83.tar.gz tar -zxvf IPy-0.83.tar.gz cd IPy-0.83 python setup.py install 可以用version的方法区分IPV4或者IPV6,如下面的代码,返回4就是ipv4,返回6就是IPV6. >>&g

【python】IP地址处理模块IPy

来源:https://pypi.python.org/pypi/IPy IPy模块 该模块可以方便的处理IPv4和IPv6地址. 以下是从来源中拷贝的一些例子: >>> from IPy import IP>>> ip = IP('127.0.0.0/30')>>> for x in ip:... print(x)...127.0.0.0127.0.0.1127.0.0.2127.0.0.3>>> ip2 = IP('0x7f0000

python学习笔记-Day7(configparser模块、shutil、压缩与解压模块、subprocess)

configparser模块 # configparser用于处理特定格式的文件,其本质上是利用open来操作文件 # 下边我们就创建这种特定格式配置文件,来操作以下这里模块方法 --------------test.conf---------------- [section1] # configparser 会认定以中括号括住的为一个节点(node) k1 = 111 # 节点下,每一行配置文件为键值对存在(也可以写成 k2:123) k2 = v2 k3 = 123 k4 = True k1

python学习笔记(图表生成matplotlib模块下载安装)

最近博主在找工作换新环境.昨天电话面试中问到python中threading模块进行接口性能测试的时候.如何生成性能测试报告 我现在还停留在打印在屏幕中.所以今天想着是否可以生成相应的性能测试报告 首先想到的是python是否支持生成图表.有很多模块可以支持 博主这里就先试一试matplotlib模块 具体这个模块的来源.我就不细说明了.直接就是下载安装 这里给出pypi的下载地址: https://pypi.python.org/pypi/matplotlib/ 根据需要的版本下载对应的安装包

Python学习笔记六(常用模块、面向对象基础)

一.random模块 import random print(random.random()) #0-1之间的小数 print(random.randint(1,5)) #1-5之间(包括1和5)的整数 print(random.randrange(1,5)) #1-5之间(包含1,不好包含5)的整数 print(random.choice(['a','b','c'])) #给定列表中任意元素 print(random.sample(['a','b','c','d'],2)) #给定列表中任意n

Python学习笔记十六_模块结构调整

一.什么是模块结构调整 当一个脚本中有大量的配置.方法及接口时,脚本往往显得十分臃肿.为了代码更易读,可以将一个繁杂的脚本根据不同的功能放在不同的文件夹中分类管理,即模块结构调整. 二.模块结构调整实例 下面根据一个具体的例子来看一下如何拆分调整代码 1.根据正常人的思维写代码完成功能 代码需求: (1) 注册接口: (a) 写一个注册接口,密码存成密文 (b) 数据存到redis,redis的key用string类型 (c) Amy  7869d295e566295b51eec5d6bed67

python学习笔记--Win7安装paramiko模块

在安装软件的过程中,一定要找对正确的安装方法,之前找了很多解决问题的方法,但是发现大多数的方法都不对,浪费了时间,问题也很难解决. 文章借鉴 http://www.cnblogs.com/saneri/p/5715661.html 1.首先下载PyCrypto for Python  根据自己的python版本选择对应的PyCrypto,下载默认安装即可. 地址为: http://www.voidspace.org.uk/python/modules.shtml#pycrypto 2.下载安装e

python学习笔记12-模块使用

python学习笔记12-模块使用 模块os,sys 什么是模块? 模块os,sys 模块是Python组织代码的一种基本方式 一个Python脚本可以单独运行,也可以导入到另外一个脚本运行,用import hello语句来导入,不用加入.py 什么是Python的 包? Python的模块可以按照目录组织为包 创建一个包的步骤: 创建一个名字为包名的目录 在改目录下创建一个__init__.py文件 根据需要,在该目录下存放脚本文件或已编译的扩展及子包 import pack.m1,pack.

Python学习笔记-安装MySQLdb模块

模块下载地址: MySQL-python 1.2.3 for Windows and Python 2.7, 32bit and 64bit versions http://www.codegood.com/archives/129 直接点击安装exe即可,如果缺少dll文件,可以百度下载相关dll文件. Python学习笔记-安装MySQLdb模块