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)