Python IPy模块常用方法

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Python IPy模块常用方法

简介

IPy这个第三方包主要提供了包括网段、网络掩码、广播地址、子网数、IP类型的处理等等功能。

常用方法

查看所有方法

1

>>> dir(IPy)['INT_TYPES''IP''IPSet''IPV6_MAP_MASK''IPV6_TEST_MAP''IPint''IPv4ranges''IPv6ranges''MAX_IPV4_ADDRESS''MAX_IPV6_ADDRESS''STR_TYPES''_BitTable''__builtins__''__cached__''__doc__''__file__''__loader__''__name__''__package__''__spec__''__version__''_checkNetaddrWorksWithPrefixlen''_checkNetmask''_checkPrefix''_count0Bits''_count1Bits''_countFollowingZeros''_intToBin''_ipVersionToLen''_netmaskToPrefixlen''_parseAddressIPv6''_prefixlenToNetmask''_remove_subprefix''bisect''collections_abc''intToIp''parseAddress''types''xrange']

(1)获取IP的协议版本  

1

2

3

# 查看IP的协议

print(IP("12.12.1.1").version())

print(IP("fe80::6111:d4dd:b65d:1535").version())

(2)获取IP的类型

1

2

print(IP("192.168.0.1").iptype())

print(IP("11.1.1.2").iptype())

(3)获取指定网段的IP的清单信息  

1

2

3

4

5

6

7

ip=IP("10.0.0.0/28")

#ip的起始点

print(ip.net())

#ip的子网掩码

print(ip.netmask())

#ip的广播地址

print(ip.broadcast())

(4)IP地址的反转

1

2

#IP地址反转

ip=IP("12.13.14.15")

(5)IP地址的进制转换

1

2

3

4

5

6

7

ip=IP("12.13.14.15")

#将IP地址转换为十进制

print(ip.int())

#将IP地址转换为二进制

print(ip.strBin())

#将IP地址转换为八进制

print(ip.strHex())

(6)遍历获取一个网段的所有IP地址  

1

2

3

4

5

6

ip=IP("10.0.0.0/28")

#计算网段内ip的个数

print(ip.len())

#遍历打印网段内的每一个IP

for in ip :

    print(i)

(7)子网掩码为16与子网掩码掩码为24的局域网的比较与计算

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#大局域网段

print(IP("192.168.0.0-192.168.255.255",make_net=True))

#小局域网段

print(IP("192.168.1.0-192.168.1.255",make_net=True))

ip=(IP("192.168.0.0/16"))

print(ip.len())#网段IP的个数

print(ip.strNormal(0))#起始IP

print(ip.strNormal(1))#网段

print(ip.strNormal(2))#子网掩码

print(ip.strNormal(3))#IP段落

ip1=(IP("192.168.1.0/24"))

print(ip1.len())

print(ip1.strNormal(0))

print(ip1.strNormal(1))

print(ip1.strNormal(2))

print(ip1.strNormal(3))

(8)已知一个IP和子网掩码,计算其属于的网段  

1

2

3

print(IP('192.168.1.0').make_net('255.255.255.0'))

print(IP('192.168.1.0/255.255.255.0', make_net = True))

print(IP('192.168.1.0-192.168.1.255', make_net = True))

(9)判断一个IP地址是否在一个网段

1

print("12.11.12.133" in IP("12.11.12.0/24"))

(10)判断两个网段是否存在包含关系

1

2

3

IP('10.0.0.0/24') < IP(12.0.0.0/24) #类似于整型的大小比较

'192.168.1.100' in IP('192.168.1.0/24') #判断IP地址和网段是否在另一个网段内

IP('192.168.1.0/24'in IP('192.168.0.0/16')

(11)判断两个网段是否重叠 返回1表示重叠了

1

2

IP('192.168.0.0/23').overlaps('192.168.1.0/24')

IP('192.168.1.0/24').overlaps('192.168.2.0')

示例:

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

#coding:utf-8

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('reverse address: %s' % ips.reverseNames()[0])

  print('subnet: %s' % len(ips))

else: #单个地址

  print('reverse address: %s' % ips.reverseNames()[0])

print('hexadecimal: %s' % ips.strHex())

print('binary: %s' % ips.strBin())

print('iptype: %s' % ips.iptype())

 

 

运行结果:

C:\Users\admin\workspace\zhangnq>python IPy_test2.py

please input an IP or net-range: 192.168.1.1

reverse address: 1.1.168.192.in-addr.arpa.

hexadecimal: 0xc0a80101

binary: 11000000101010000000000100000001

iptype: PRIVATE

C:\Users\admin\workspace\zhangnq>python IPy_test2.py

please input an IP or net-range: 8.8.8.8

reverse address: 8.8.8.8.in-addr.arpa.

hexadecimal: 0x8080808

binary: 00001000000010000000100000001000

iptype: PUBLIC

C:\Users\admin\workspace\zhangnq>python IPy_test2.py

please input an IP or net-range: 192.168.1.0/28

net: 192.168.1.0

netmask: 255.255.255.240

broadcast: 192.168.1.15

reverse address: 0.1.168.192.in-addr.arpa.

subnet: 16

hexadecimal: 0xc0a80100

binary: 11000000101010000000000100000000

iptype: PRIVATE  

 

ipy模块用法示例脚本

一个自动识别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

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def ip():

  try:

    from IPy import IP  ###加载模块

    ip_s = raw_input('请输入IP地址或者网段地址:' )###输入一个IP地址或者网段

    ips = IP(ip_s)  #定义元素

    if len(ips) > 1: #如果len出来的数字大于1,那么就是一个网段

      print('网络地址: %s' % ips.net())

      print('子网掩码: %s' % ips.netmask())

      print('网络广播地址: %s' % ips.reverseNames() [0])

      print('网络子网数: %s' % len(ips))

    else:  ###否则就是一个地址

      print('IP反向解析: %s' % ips.reverseNames() [0])

      print('十六进制地址: %s' % ips.strHex())

      print('二进制地址: %s' % ips.strBin())

      print('地址类型: %s' % ips.iptype())

    print time.strftime("%Y-%m-%d %H:%M:%S")

    #code

  except Exception, e:

    logging.info("error:" + str(e) + "\n" + traceback.format_exc())

    print traceback.format_exc()

  finally:

    pass

运行效果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

[root@mylinuxer python]# 192.168.1.0/24

-bash: 192.168.1.0/24: No such file or directory

[root@mylinuxer python]# python python.py

请输入IP地址或者网段地址: 192.168.1.0/24

网络地址: 192.168.1.0

子网掩码: 255.255.255.0

网络广播地址: 1.168.192.in-addr.arpa.

网络子网数: 256

[root@mylinuxer python]# python python.py

请输入IP地址或者网段地址: 192.168.1.1

IP反向解析: 1.1.168.192.in-addr.arpa.

十六进制地址: 0xc0a80101

二进制地址: 11000000101010000000000100000001

地址类型: PRIVATE

[root@mylinuxer python]# python python.py

请输入IP地址或者网段地址: 116.213.249.211

IP反向解析: 211.249.213.116.in-addr.arpa.

十六进制地址: 0x74d5f9d3

二进制地址: 01110100110101011111100111010011

地址类型: PUBLIC

相关文章
|
1天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
11 7
|
1天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
10 6
|
2天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
本教程介绍SciPy常量模块中的单位类型,涵盖公制、质量、时间、长度等单位。示例代码展示了如何使用`scipy.constants`模块获取不同质量单位的千克值,如公吨、磅、盎司、原子质量单位等。
8 1
|
2天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
SciPy常量模块提供了多种单位的转换,包括公制、质量、时间、长度等单位。例如,质量单位中,`constants.gram`返回0.001千克,`constants.lb`返回0.45359237千克,涵盖了从日常到科学计算所需的广泛单位。
5 0
|
2天前
|
Python
SciPy 教程 之 SciPy 模块列表 4
SciPy 常量模块包含了多种单位类型,包括公制单位、质量单位、角度换算、时间单位、长度单位、压强单位、体积单位、速度单位、温度单位、能量单位、功率单位和力学单位。此外,还提供了二进制前缀单位,如 kibi(1024 字节)、mebi(1048576 字节)等。
5 0
|
3天前
|
Python
SciPy 教程 之 SciPy 模块列表 2
SciPy 常量模块 `constants` 提供了多种数学常数,如圆周率(π ≈ 3.14159)和黄金比例(≈ 1.61803)。通过 `from scipy import constants` 可以访问这些常量。使用 `dir(constants)` 可查看所有可用常量列表。
12 0
|
3天前
|
Python
SciPy 教程 之 SciPy 模块列表 3
SciPy教程之SciPy模块列表3:介绍常量模块中的单位类型与国际单位制词头。涵盖公制、质量、时间等单位及yotta、zetta等20个词头,示例代码展示如何使用这些单位和词头。
10 0
|
5月前
|
Python 人工智能 数据可视化
Python模块与包(八)
Python模块与包(八)
47 0
Python模块与包(八)
|
1月前
|
人工智能 数据可视化 搜索推荐
Python异常模块与包
Python异常模块与包
|
1月前
|
开发者 Python
30天拿下Python之模块和包
30天拿下Python之模块和包
15 2