python中的IPy模块

python 中的 IPy 模块

模块的安装:

​ 使用pip install IPy安装 IPy 模块

模块的功能:

​ 提供了包括 网段 网络掩码 广播地址 子网数 IP 类型 的处理等等功能

模块的使用:

import IPy
print(IPy.IP('10.0.0.0/8').version())

上述代码将解析出所传 IP 地址的版本,即 IPV4 或 IPV6,大家可能会对 10.0.0.0/8最后的/8感到困惑,这里简单的说一下,它表示的是 子网掩码 ,它一般 与 IP 地址一起出现 ,用来表示该 IP 地址的 网段。它们只有三种形态:255.0.0.0,255.255.0.0,255.255.255.0,255 对应的位置便是标识了 IP 地址的网段 。比如子网掩码为 255.255.255.0 的 IP 地址 10.0.0.210.0.0.35便是 来自同一网段10.0.0.0,这 表明它们可在局域网内通信,反之,子网掩码为 255.255.0.0 的 IP 地址10.0.0.2和子网掩码 255.255.255.0 的 IP 地址10.0.0.35 不属于一个网段

IP 地址的每一个.分隔的是一个 8 位二进制数字,换算成十进制便是 0 -255 间的一个数字,一个 255 便是 8 位的 1,所以上面给出的代码中的 IP 地址中的/8便是指255.0.0.0,同理,/16便是255.255.0.0

上述代码的运行结果:

4

这表示10.0.0.0是一个IPV4的地址,事实的确如此,现在我们尝试使用 IPV6 版本的地址。

print(IPy.IP('::1').version())  
print(IPy.IP('fe80::f0cf:40b4:d644:1fd0').version()) 

运行结果:

6
6

有关 IP 地址的内容将在以后更详细的介绍

简化模块的使用

IPy.IP() 这种方式实在是太麻烦了,IPy 模块中有那么多函数,但是现在只想用IP()这一个函数,我们可以用 from IPy import IP的方式单独导入所需要的函数

from IPy import IP

var01 = IP('10.0.0.0/24')
print(var01.len())

上述代码表示 询问10.0.0.0/24这样的一个网段可以生成多少个 IP 地址 ,很明显,子网掩码为 255.255.255.0 的 IP 地址 只有最后一位可以表示一个主机

运行结果:

256

它告诉我们总共能有 256 个 IP 地址,现在我们想把它们都打印出来

for ip in var01:
    print(ip)

运行结果:

10.0.0.0
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
10.0.0.6
10.0.0.7
10.0.0.8
10.0.0.9
10.0.0.10
10.0.0.11
10.0.0.12
10.0.0.13
10.0.0.14
10.0.0.15
10.0.0.16
10.0.0.17
10.0.0.18
10.0.0.19
10.0.0.20
10.0.0.21
10.0.0.22
10.0.0.23
10.0.0.24
10.0.0.25
10.0.0.26
10.0.0.27
10.0.0.28
10.0.0.29
10.0.0.30
10.0.0.31
10.0.0.32
10.0.0.33
10.0.0.34
10.0.0.35
10.0.0.36
10.0.0.37
10.0.0.38
10.0.0.39
10.0.0.40
10.0.0.41
10.0.0.42
10.0.0.43
10.0.0.44
10.0.0.45
10.0.0.46
10.0.0.47
10.0.0.48
10.0.0.49
10.0.0.50
10.0.0.51
10.0.0.52
10.0.0.53
10.0.0.54
10.0.0.55
10.0.0.56
10.0.0.57
10.0.0.58
10.0.0.59
10.0.0.60
10.0.0.61
10.0.0.62
10.0.0.63
10.0.0.64
10.0.0.65
10.0.0.66
10.0.0.67
10.0.0.68
10.0.0.69
10.0.0.70
10.0.0.71
10.0.0.72
10.0.0.73
10.0.0.74
10.0.0.75
10.0.0.76
10.0.0.77
10.0.0.78
10.0.0.79
10.0.0.80
10.0.0.81
10.0.0.82
10.0.0.83
10.0.0.84
10.0.0.85
10.0.0.86
10.0.0.87
10.0.0.88
10.0.0.89
10.0.0.90
10.0.0.91
10.0.0.92
10.0.0.93
10.0.0.94
10.0.0.95
10.0.0.96
10.0.0.97
10.0.0.98
10.0.0.99
10.0.0.100
10.0.0.101
10.0.0.102
10.0.0.103
10.0.0.104
10.0.0.105
10.0.0.106
10.0.0.107
10.0.0.108
10.0.0.109
10.0.0.110
10.0.0.111
10.0.0.112
10.0.0.113
10.0.0.114
10.0.0.115
10.0.0.116
10.0.0.117
10.0.0.118
10.0.0.119
10.0.0.120
10.0.0.121
10.0.0.122
10.0.0.123
10.0.0.124
10.0.0.125
10.0.0.126
10.0.0.127
10.0.0.128
10.0.0.129
10.0.0.130
10.0.0.131
10.0.0.132
10.0.0.133
10.0.0.134
10.0.0.135
10.0.0.136
10.0.0.137
10.0.0.138
10.0.0.139
10.0.0.140
10.0.0.141
10.0.0.142
10.0.0.143
10.0.0.144
10.0.0.145
10.0.0.146
10.0.0.147
10.0.0.148
10.0.0.149
10.0.0.150
10.0.0.151
10.0.0.152
10.0.0.153
10.0.0.154
10.0.0.155
10.0.0.156
10.0.0.157
10.0.0.158
10.0.0.159
10.0.0.160
10.0.0.161
10.0.0.162
10.0.0.163
10.0.0.164
10.0.0.165
10.0.0.166
10.0.0.167
10.0.0.168
10.0.0.169
10.0.0.170
10.0.0.171
10.0.0.172
10.0.0.173
10.0.0.174
10.0.0.175
10.0.0.176
10.0.0.177
10.0.0.178
10.0.0.179
10.0.0.180
10.0.0.181
10.0.0.182
10.0.0.183
10.0.0.184
10.0.0.185
10.0.0.186
10.0.0.187
10.0.0.188
10.0.0.189
10.0.0.190
10.0.0.191
10.0.0.192
10.0.0.193
10.0.0.194
10.0.0.195
10.0.0.196
10.0.0.197
10.0.0.198
10.0.0.199
10.0.0.200
10.0.0.201
10.0.0.202
10.0.0.203
10.0.0.204
10.0.0.205
10.0.0.206
10.0.0.207
10.0.0.208
10.0.0.209
10.0.0.210
10.0.0.211
10.0.0.212
10.0.0.213
10.0.0.214
10.0.0.215
10.0.0.216
10.0.0.217
10.0.0.218
10.0.0.219
10.0.0.220
10.0.0.221
10.0.0.222
10.0.0.223
10.0.0.224
10.0.0.225
10.0.0.226
10.0.0.227
10.0.0.228
10.0.0.229
10.0.0.230
10.0.0.231
10.0.0.232
10.0.0.233
10.0.0.234
10.0.0.235
10.0.0.236
10.0.0.237
10.0.0.238
10.0.0.239
10.0.0.240
10.0.0.241
10.0.0.242
10.0.0.243
10.0.0.244
10.0.0.245
10.0.0.246
10.0.0.247
10.0.0.248
10.0.0.249
10.0.0.250
10.0.0.251
10.0.0.252
10.0.0.253
10.0.0.254
10.0.0.255
var02 = IP('121.31.5.0/30')
print(var02.len())

for x in var02:
    print(x)

运行结果:

4
121.31.5.0
121.31.5.1
121.31.5.2
121.31.5.3

广播地址

最后一个 可用的 IP 地址被称为广播地址,第一个可用的 IP 地址被称为网络地址段,虽然显示为可用,但实际上都是不允许被使用的

归属问题

检测某一个 IP 地址是否属于给定的 IP 地址段

print('192.168.0.107' in IP('192.168.0.0/24'))

运行结果:

True

实例

ip_s = input('Input ip address:')
ips = IP(ip_s)

if len(ips) > 1:
    print(ips.net()) # 网络段
    print(ips.broadcast()) # 广播段
    print(ips.netmask())  # 子网掩码
    print(len(ips))    
else:
    print(ips)
    print(ips.strBin())        # 转换为二进制

输入 192.168.0.0/24

运行结果:

192.168.0.0    
192.168.0.255 
255.255.255.0 # 
256

网络检测

检测是否为 公网ip

ip_s = input('Input ip address:')
ips = IP(ip_s)

print(ips.iptype())

输入 192.168.9.7

运行结果:

PRIVATE

输入 10.0.0.5

运行结果:

PRIVATE

输入 123.1.2.3

运行结果:

PUBLIC

Tips:常用的 private 地址为 192.168.x.x , 10.x.x.x172.16.x.x - 172.32.x.x

有关网络部分将在以后详细介绍