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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# -*- coding:utf-8 -*- import ipaddress
n1 = ipaddress.ip_network( '192.0.2.0/28' )
n2 = ipaddress.ip_network( '192.0.2.1/32' )
a = list (n1.address_exclude(n2))
print (a)
for i in a:
print (i) # 将n2从n1中剔除
b = list (ipaddress.ip_network( '192.168.0.0/29' ).hosts())
print (b)
for i in b:
print (i) # 打印主机地址
c = list (ipaddress.ip_network( '192.168.0.0/22' ).subnets(new_prefix = 24 ))
print (c)
for i in c:
print (i) # 以24位掩码拆分'192.168.0.0/22'
d = list (ipaddress.ip_network( '192.0.2.0/24' ).supernet(new_prefix = 20 ))
print (d)
print (ipaddress.ip_network( '192.0.2.0/24' ).supernet(new_prefix = 20 ))
for addr in ipaddress.IPv4Network( '192.168.2.0/28' ):
print (addr) # 打印'192.168.2.0/28'中的ip地址,注意和上面主机地址的区别
interface = ipaddress.IPv4Interface( '192.168.1.1/23' )
print (interface.ip) # 打印ip地址
print (interface.network) # 打印所属网段
print (interface.with_netmask) # 与网络的接口的字符串表示作为网络掩码
print (interface.with_prefixlen) # 带有掩码的接口的字符串表示形式,以前缀符号表示。
# IP地址进制间相互转换(点分十进制,十进制,十六进制,二进制,字节) ip = ipaddress.ip_address( '192.168.1.1' )
print (ip.version) # 打印IP版本号
print ( str (ip)) # 转换为字符串
print ( int (ip)) # 转换为十进制
print ( hex ( int (ip))) # 转换为十六进制
print ( bin ( int (ip))) # 转换为二进制
print ( oct ( int (ip))) # 转换为八进制
print (ip.packed) # 转换为字节
print (ipaddress.ip_address( 3221225985 )) # 转换为ip地址
print (ipaddress.IPv4Address( 3221225985 )) # 转换为ip地址
print (ipaddress.v4_int_to_packed( 3221225985 )) # 转换为字节
print (ipaddress.IPv4Address(b '\xc0\x00\x02\x01' )) # 字节转换为ip地址
print (ipaddress.IPv4Address( 0xc0a80101 )) # 十六进制转换为ip地址
print (ipaddress.IPv4Address( 0b11000000101010000000000100000001 )) # 二进制转换为ip地址
d = [ipaddr for ipaddr in ipaddress.summarize_address_range(
ipaddress.IPv4Address( '192.168.1.0' ),
ipaddress.IPv4Address( '192.168.1.25' )
)] for i in d:
print (i) # Network objects can be iterated to list all the addresses belonging to the network.
e = [ipaddr for ipaddr in ipaddress.collapse_addresses([
ipaddress.IPv4Network( '192.168.1.0/31' ),
ipaddress.IPv4Network( '192.168.1.2/31' ),
ipaddress.IPv4Network( '192.168.1.4/30' )]
)] for i in e:
print (i) # 将以上三个网段进行合并
print (ipaddress.ip_network( '192.0.2.1/32' ).compare_networks(ipaddress.ip_network( '192.0.2.2/32' ))) # 结果为-1
print (ipaddress.ip_network( '192.0.2.1/32' ).compare_networks(ipaddress.ip_network( '192.0.2.0/32' ))) # 结果为1
print (ipaddress.ip_network( '192.0.2.1/32' ).compare_networks(ipaddress.ip_network( '192.0.2.1/32' ))) # 结果为0
print (ipaddress.IPv4Address( '127.0.0.2' ) > ipaddress.IPv4Address( '127.0.0.1' ))
print (ipaddress.IPv4Address( '127.0.0.2' ) = = ipaddress.IPv4Address( '127.0.0.1' ))
print (ipaddress.IPv4Address( '127.0.0.2' ) ! = ipaddress.IPv4Address( '127.0.0.1' )) # 比较IP地址
# 实例一:合并IP地址 with open ( "IP.txt" , 'r' ,encoding = 'utf-8' ) as f:
allip = f.readlines()
ip = [ipaddress.IPv4Network(net.strip( '\n' )) for net in allip]
ip2 = [addr for addr in ipaddress.collapse_addresses(ip)]
for i in ip2:
print (i)
# 实例二:剔除IP地址(把n2中的ip地址从n1中剔除) n1 = [ipaddress.ip_network( '192.0.2.0/28' ),ipaddress.ip_network( '192.1.2.0/28' )]
n2 = [ipaddress.ip_network( '192.1.2.1/32' ),ipaddress.ip_network( '192.0.2.4/32' )]
y = []
for i in n1:
for x in n2:
try :
y = list (i.address_exclude(x))
except Exception:
pass
for z in y:
print (z)
|
本文转自 baby神 51CTO博客,原文链接:http://blog.51cto.com/babyshen/1870014,如需转载请自行联系原作者