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'
)
= 
list
(n1.address_exclude(n2))
 
print
(a)
for 
in 
a:
    
print
(i) 
# 将n2从n1中剔除
 
= 
list
(ipaddress.ip_network(
'192.168.0.0/29'
).hosts())
print
(b)
for 
in 
b:
    
print
(i)  
# 打印主机地址
 
= 
list
(ipaddress.ip_network(
'192.168.0.0/22'
).subnets(new_prefix
=
24
))
print
(c)
for 
in 
c:
    
print
(i) 
# 以24位掩码拆分'192.168.0.0/22'
 
= 
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地址
 
= 
[ipaddr 
for 
ipaddr 
in 
ipaddress.summarize_address_range(
    
ipaddress.IPv4Address(
'192.168.1.0'
),
    
ipaddress.IPv4Address(
'192.168.1.25'
)
)]
for 
in 
d:
    
print
(i) 
# Network objects can be iterated to list all the addresses belonging to the network.
 
= 
[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 
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 
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'
)]
= 
[]
for 
in 
n1:
    
for 
in 
n2:
        
try
:
            
= 
list
(i.address_exclude(x))
        
except 
Exception:
            
pass
    
for 
in 
y:
        
print
(z)