02 IPy模块的应用

IPy模块的简介

是一个强大的第三方模块,用过对ipy模块的使用,可以很好的帮助我们高效的完成ip规划工作。

安装方式

pip install IPy

检测方法

>>> import IPy
>>> 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']

网络基本信息

IPy模块包含ip类,可以处理大部分格式的IPV6和IPV4的网络和地址

ip基本信息

# 识别ip分类
version()

# 获取ip数量
len()

ipv4的演示

from IPy import IP
ip_content="192.168.15.0/24"
ip_result=IP(ip_content).version()
print("{} 的IP类型是:{}".format(ip_content,ip_result))

192.168.15.0/24 的IP类型是:4

给一个网段获取ip数量

from IPy import IP
ip_range = IP('192.168.15.0/27')
print("{}网段有{}个ip".format(ip_range, ip_range.len()))

for i in ip_range:
    print(i)
192.168.15.0/27网段有32个ip
>>> 
>>> for i in ip_range:
...     print(i)
... 
192.168.15.0
192.168.15.1
192.168.15.2
192.168.15.3
...

IPy基本操作

反向解析、ip类型、ip转换

反向解析名称

定制ip地址

from IPy import IP

test_ip = IP("115.231.142.3")# 公网
name=test_ip.reverseNames()
print("{}的域名名称是{}".format(test_ip,name))

获取ip类型

>>> from IPy import IP
>>> test_ip.iptype()
'PUBLIC'

ip地址的转换

>>> from IPy import IP
>>> IP('8.8.8.8').int()
134744072
>>> IP('8.8.8.8').strHex()
'0x8080808'
>>> IP('8.8.8.8').strBin()
'00001000000010000000100000001000'

>>> print(IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24

多网络实践

网段比较

# ip < ip
>>> IP('10.0.0.0/24') < IP('12.0.0.0/24')
True

地址包含

ip in ip
T or F

>>> from IPy import IP
>>> '192.168.1.100' in IP('192.168.1.0/24')
True
>>> IP('192.168.1.0/24') in IP('192.168.0.0/16')
True

网段重叠

ip.overlaps(ip网段)
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1	#1代表重叠,0代表不重叠

综合应用

#!/usr/bin/python3.6.7
from IPy import IP

while True:
    ip_s = input('请输入一个ip地址或者网段>>>:')  # 接收用户输入的ip或者网段
    try:
        ips = IP(ip_s)
    except Exception as e:
        print("您输入的ip格式不正确!请重新输入")
        continue
    else:
        if len(ips) > 1:
            print('网络地址>>>: %s' % ips.net())
            print('网络子网掩码>>>: %s' % ips.netmask())
            print('网络广播地址>>>: %s' % ips.broadcast())
            print('地址反向解析>>>: %s' % ips.reverseNames()[0])
            print('子网个数>>>: %s' % len(ips))
            for i in ips:
                print("网段内的ip为>>>: %s" % i)
        else:
            print("输出的16进制为>>:%s" % ips.strHex())
            print("输出的2进制为>>:%s" % ips.strBin())
            print("网络类型为>>:%s" % ips.iptype())
原文地址:https://www.cnblogs.com/zhaokunhao/p/14983347.html