博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ip地址处理模块IPy
阅读量:5863 次
发布时间:2019-06-19

本文共 3703 字,大约阅读时间需要 12 分钟。

下载以及安装:

下载地址:

 tar -zxvf IPy-0.83.tar.gz 

 cd IPy-0.83

 python setup.py install


可以用version的方法区分IPV4或者IPV6,如下面的代码,返回4就是ipv4,返回6就是IPV6.

1
2
3
4
5
6
>>> 
from 
IPy 
import 
IP
>>> IP(
'192.0.0.0/16'
).version()  
4
>>> IP(
'::2'
).version()
6
>>>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>>> 
import 
tab
>>> 
from 
IPy 
import 
IP
>>> ip 
= 
IP(
'192.168.1.0/24'
>>> 
print 
ip.
len
()
256
>>> 
for 
in 
ip:
    
print 
x
     
192.168
.
1.0
192.168
.
1.1
192.168
.
1.2
192.168
.
1.3
192.168
.
1.4
192.168
.
1.5
192.168
.
1.6
192.168
.
1.7
192.168
.
1.8
192.168
.
1.9
192.168
.
1.10
192.168
.
1.11
192.168
.
1.12
192.168
.
1.13 
.......

下面介绍IP类的几个常见的方法,包括反向解析域名,IP类型,IP转换等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> 
import 
tab
>>> 
from 
IPy 
import 
IP
>>> ip 
= 
IP(
'192.168.1.107'
)
>>> ip.reverseNames()
[
'107.1.168.192.in-addr.arpa.'
]
>>> ip.iptype()                            
#私有地址
'PRIVATE'
>>> IP(
'202.15.15.6'
).iptype()
'PUBLIC'                                    
#公有地址
>>> IP(
"8.8.8.8"
).
int
()
134744072                                
#转化为整形格式
>>> IP(
"8.8.8.8"
).strHex()
'0x8080808'                                
#转换成十六进制
>>> IP(
"8.8.8.8"
).strBin()
'00001000000010000000100000001000'       
#转换成二进制             
>>> 
print 
(IP(
0x8080808
))
8.8
.
8.8                                
#十六进制转换为IP格式
>>>

IP方法也支持网络地址的转换,如下:

1
2
3
4
5
6
7
8
9
>>> 
import 
tab
>>> 
from 
IPy 
import 
IP
>>> 
print 
(IP(
'192.168.1.0'
).make_net(
'255.255.255.0'
))
192.168
.
1.0
/
24
>>> 
print 
(IP(
'192.168.1.0/255.255.255.0'
,make_net
=
True
))
192.168
.
1.0
/
24
>>> 
print 
(IP(
'192.168.1.0-192.168.1.255'
,make_net
=
True
))
192.168
.
1.0
/
24
>>>

当然也可以反过来:

1
2
3
4
5
6
7
8
9
10
11
>>> 
import 
tab
>>> 
from 
IPy 
import 
IP
>>> IP(
'192.168.1.0/24'
).strNormal(
0
)
'192.168.1.0'
>>> IP(
'192.168.1.0/24'
).strNormal(
1
)
'192.168.1.0/24'
>>> IP(
'192.168.1.0/24'
).strNormal(
2
)
'192.168.1.0/255.255.255.0'
>>> IP(
'192.168.1.0/24'
).strNormal(
3
)
'192.168.1.0-192.168.1.255'
>>>

比较IP,返回真假:

1
2
3
4
5
6
7
8
9
10
11
>>> 
import 
tab
>>> 
from 
IPy 
import 
IP
>>> IP(
'192.168.1.0/24'
)<IP(
'192.168.2.0/24'
)
True
>>> IP(
'192.168.1.0/24'
)>IP(
'192.168.2.0/24'
)
False
>>> 
'192.168.1.10' 
in 
IP(
'192.168.1.0/24'
)
True
>>> IP(
'192.168.1.0/24'
in 
IP(
'192.168.0.0/16'
)
True
>>>

判断是否重叠,返回0(代表没重叠)或者1(代表有重叠):

1
2
3
4
5
>>> 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
>>>

示例:根据输入的IP或者子网返回网络,掩码,广播,,反向解析,子网数,IP类型信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#2017,8,24
 
from 
IPy 
import 
IP
         
ip_s 
= 
raw_input
(
'Please input an IP or net-range:'
)
         
ips 
= 
IP(ip_s)
 
if 
len
(ips) > 
1
:
          
        
print 
(
'net:%s' 
% 
ips.net()) 
#输出网络地址
        
print 
(
'netmask:%s' 
% 
ips.netmask()) 
#输出网络掩码
        
print 
(
'broadcast:%s' 
% 
ips.broadcast()) 
#输出广播地址
        
print 
(
'subnet:%s' 
% 
len
(ips)) 
#输出网络子网数
        
print 
(
'reverse address: %s' 
% 
ips.reverseNames()[
0
]) 
#输出地址的反向解析
 
else
:
         
print 
(
'reverse address: %s' 
% 
ips.reverseNames()[
0
]) 
#输出地址的反向解析
 
 
print 
(
'hexadecimal:%s' 
% 
ips.strHex()) 
#输出十六进制
print 
(
'binary ip: %s' 
% 
ips.strBin())  
#输出二进制
print 
(
'iptype :%s' 
% 
ips.iptype()) 
#输出地址类型,如私有,公有,换回地址

运行结果:

1
2
3
4
5
6
7
8
9
10
11
[root@China IP]
# python IP_simple1.py 
Please 
input 
an IP 
or 
net
-
range
:
192.168
.
2.0
/
24
net:
192.168
.
2.0
netmask:
255.255
.
255.0
broadcast:
192.168
.
2.255
subnet:
256
reverse address: 
2.168
.
192.in
-
addr.arpa.
hexadecimal:
0xc0a80200
binary ip: 
11000000101010000000001000000000
iptype :PRIVATE
[root@China IP]
#
1
2
3
4
5
6
7
[root@China IP]
# python IP_simple1.py 
Please 
input 
an IP 
or 
net
-
range
:
192.168
.
2.0
reverse address: 
0.2
.
168.192
.
in
-
addr.arpa.
hexadecimal:
0xc0a80200
binary ip: 
11000000101010000000001000000000
iptype :PRIVATE
[root@China IP]
#

总结:写代码的时候一定要分清大小写。



本文转自 天道酬勤VIP 51CTO博客,原文链接:http://blog.51cto.com/tdcqvip/1958806

转载地址:http://offnx.baihongyu.com/

你可能感兴趣的文章
CreateThread、_beginthreadex、AfxBeginThread
查看>>
API读取写入 ini文件内容的方法函数详解
查看>>
Android事件详解——触屏事件MotionEvent(一)
查看>>
Apache - AH01630
查看>>
MySQL索引的创建、删除和查看
查看>>
一键测试脚本bench.sh
查看>>
结合explain extended浅析使用mysql in 的效率
查看>>
常用的SQL语句
查看>>
线程池学习
查看>>
MFC非模态对话框教程相关
查看>>
Hadoop文件写入详细剖析(22)
查看>>
QuestionAnsweringSystem v1.1 发布,人机问答系统
查看>>
java.lang.Integer$IntegerCache
查看>>
set_exception_handler() 函数设置用户自定义的异常处理函数。
查看>>
测试pypcap的代码(环境:Windows, Python2.7)
查看>>
正则表达式元素:量词介绍
查看>>
intellij idea下用maven安装ssm修改setting.xml的文件位置
查看>>
Windows 7及以上操作系统无法访问网络位置的问题
查看>>
Windows下 .rtf 批量转换 .doc
查看>>
MySQL: Can’t create table **** (errno: 121)的解决方法
查看>>