Python中IP地址处理IPy模块的方法
安装
先下载源码,地址:ps://pypi.python.org/pypi/IPy/">https://pypi.python.org/pypi/IPy/,然后解压后使用命令pythonsetup.pyinstall安装。
使用
1、显示IP类型
>>>IP('192.168.1.1').version() 4 >>>IP('::1').version() 6
类似如上所示,通过version方法可以的判断输入的IP是IPv4还是IPv6。
2、网段计算输出
代码:
fromIPyimportIP ip=IP('192.168.0.0/28') printip.len() forxinip: printx printip.strNormal(0) printip.strNormal(1) printip.strNormal(2) printip.strNormal(3)
len()方法可以计算网段的IP个数。
strNormal()方法指定不同wantprefixlen参数可以定制不同类型的输出。上面输出类似如下:
16 192.168.0.0 192.168.0.1 192.168.0.2 192.168.0.3 ...... 192.168.0.15 192.168.0.0 192.168.0.0/28 192.168.0.0/255.255.255.240 192.168.0.0-192.168.0.15
3、格式转换
实例介绍几个常用方法,包括方向解析名称、IP类型、IP进制转换、网络地址网段地址转换。
ip=IP('192.168.0.1') printip.reverseNames()#反向解析地址格式 printip.iptype()#显示IP地址类型,私有还是公有 ip=IP('8.8.8.8') printip.iptype() printip.int()#转换成整型格式 printip.strHex()#转换成十六进制格式 printip.strBin()#转换成二进制格式 #网络地址、网段地址格式转换 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))
4、地址比较
判断IP地址和网段是否包含于另一个网段中,如下:
>>>'192.168.1.1'inIP('192.168.1.0/24') True >>>IP('192.168.1.0/24')inIP('192.168.0.0/16') True
判断两个网段是否存在重叠,如下:
>>>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
其中1表示存在重叠,0表示不存在重叠。
举例
代码:
#coding:utf-8 fromIPyimportIP ip_s=raw_input("pleaseinputanIPornet-range:") ips=IP(ip_s) iflen(ips)>1:#网络地址 print('net:%s'%ips.net()) print('netmask:%s'%ips.netmask()) print('broadcast:%s'%ips.broadcast()) print('reverseaddress:%s'%ips.reverseNames()[0]) print('subnet:%s'%len(ips)) else:#单个地址 print('reverseaddress:%s'%ips.reverseNames()[0]) print('hexadecimal:%s'%ips.strHex()) print('binary:%s'%ips.strBin()) print('iptype:%s'%ips.iptype())
运行结果:
C:\Users\admin\workspace\zhangnq>pythonIPy_test2.py pleaseinputanIPornet-range:192.168.1.1 reverseaddress:1.1.168.192.in-addr.arpa. hexadecimal:0xc0a80101 binary:11000000101010000000000100000001 iptype:PRIVATE C:\Users\admin\workspace\zhangnq>pythonIPy_test2.py pleaseinputanIPornet-range:8.8.8.8 reverseaddress:8.8.8.8.in-addr.arpa. hexadecimal:0x8080808 binary:00001000000010000000100000001000 iptype:PUBLIC C:\Users\admin\workspace\zhangnq>pythonIPy_test2.py pleaseinputanIPornet-range:192.168.1.0/28 net:192.168.1.0 netmask:255.255.255.240 broadcast:192.168.1.15 reverseaddress:0.1.168.192.in-addr.arpa. subnet:16 hexadecimal:0xc0a80100 binary:11000000101010000000000100000000 iptype:PRIVATE
ipy模块用法
一个自动识别IP地址、子网、方向解析、IP类型等信息的脚本
#!/usr/bin/envpython #-*-coding:utf-8-*- defip(): try: fromIPyimportIP###加载模块 ip_s=raw_input('请输入IP地址或者网段地址:')###输入一个IP地址或者网段 ips=IP(ip_s)#定义元素 iflen(ips)>1:#如果len出来的数字大于1,那么就是一个网段 print('网络地址:%s'%ips.net()) print('子网掩码:%s'%ips.netmask()) print('网络广播地址:%s'%ips.reverseNames()[0]) print('网络子网数:%s'%len(ips)) else:###否则就是一个地址 print('IP反向解析:%s'%ips.reverseNames()[0]) print('十六进制地址:%s'%ips.strHex()) print('二进制地址:%s'%ips.strBin()) print('地址类型:%s'%ips.iptype()) printtime.strftime("%Y-%m-%d%H:%M:%S") #code exceptException,e: logging.info("error:"+str(e)+"\n"+traceback.format_exc()) printtraceback.format_exc() finally: pass
运行效果:
[root@mylinuxerpython]#192.168.1.0/24 -bash:192.168.1.0/24:Nosuchfileordirectory [root@mylinuxerpython]#pythonpython.py 请输入IP地址或者网段地址:192.168.1.0/24 网络地址:192.168.1.0 子网掩码:255.255.255.0 网络广播地址:1.168.192.in-addr.arpa. 网络子网数:256 [root@mylinuxerpython]#pythonpython.py 请输入IP地址或者网段地址:192.168.1.1 IP反向解析:1.1.168.192.in-addr.arpa. 十六进制地址:0xc0a80101 二进制地址:11000000101010000000000100000001 地址类型:PRIVATE [root@mylinuxerpython]#pythonpython.py 请输入IP地址或者网段地址:116.213.249.211 IP反向解析:211.249.213.116.in-addr.arpa. 十六进制地址:0x74d5f9d3 二进制地址:01110100110101011111100111010011 地址类型:PUBLIC
总结
以上所述是小编给大家介绍的Python中IP地址处理IPy模块的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!