python

21. Python之IPy模块

2021-06-01  本文已影响0人  随便写写咯

1 安装

1.1 pip安装

pip3 install IPy

1.2 安装后确认

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

2 模块的基本使用

语法:
IP("地址|网段").方法()

2.1 .version()

识别ip地址分类
>>> from IPy import IP
>>> IP("10.0.0.0").version() # 如果是具体地址, 不要加掩码, 会报错
4
>>> IP("10.0.0.0/24").version()
4

2.2 .len()

获取网段ip地址数量
>>> IP("10.0.0.0/24").len() 
256
>>> IP("10.0.0.1").len() 
1
# 如果是具体地址, 不要加掩码, 会报错
>>> IP("10.0.0.1/24").len()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python38\lib\site-packages\IPy.py", line 263, in __init__
    raise ValueError("%s has invalid prefix length (%s)" % (repr(self), self._prefixlen))
ValueError: IP('10.0.0.1/24') has invalid prefix length (24) 

2.3 获取一个网段, 所有的ip地址

from IPy import IP

ip_range = IP("10.0.0.0/30") 
for i in ip_range:
    print(i)
10.0.0.0
10.0.0.1
10.0.0.2
10.0.0.3
# IP()的结果, 就是括号中的ip地址本身, 属于类
# 可以直接for循环, 遍历IP("网段")中的ip信息
<class 'IPy.IP'>

2.4 获取一个网段, 可用的ip地址, 并存到指定文件

import IPy

input_ip = input('Please type ip add in CIDR format(10.0.0.0/24): ').strip()

ip_list = IPy.IP('{}'.format(input_ip))  # 输出的地址包括网络位和广播地址

sum_ip = len(ip_list)-2  # 减去网络位和广播地址

print('Total Available IP is {}'.format(sum_ip))

src_file = input("Please type where you would like to save the result in absolute path: ").strip()

with open(r'{}'.format(src_file), mode = 'wt', encoding = 'utf-8') as f: # 将ip地址存到指定文件
    for i in ip_list:
        f.write(str('{}\n'.format(i)))

3 ip地址基本操作

3.1 反向地址解析

>>> from IPy import IP
>>> ip = IP("10.0.0.0")
>>> print(ip.reverseNames())
['0.0.0.10.in-addr.arpa.']

3.2 查看地址类型

IP("10.0.0.0").iptype()

3.3 格式转换

from IPy import IP
ip_addr = IP("192.168.1.10")
ip_result = ip_addr.make_net("255.255.255.0")
print(ip_result)
>> 192.168.1.0/24
from IPy import IP
ip_addr = IP("172.17.0.0")
ip_result = ip_addr.make_net("255.255.0.0")
print(ip_result)
>> 172.17.0.0/16
from IPy import IP
ip_addr = "192.168.10.0-192.168.10.255"
ip_result = IP(ip_addr,make_net=True)
print(ip_result)
>> 
192.168.10.0/24

3.4 输出一个网段的不同信息

利用.strNormal()通过wantprefixlen数值, 来获取一个网段的不同信息
要求输入是一个网段
from IPy import IP
ip_net = '192.168.1.0/24'
print(IP(ip_net).strNormal(wantprefixlen=0))
print(IP(ip_net).strNormal(wantprefixlen=1))
print(IP(ip_net).strNormal(wantprefixlen=2))
print(IP(ip_net).strNormal(wantprefixlen=3))
192.168.1.0 
192.168.1.0/24
192.168.1.0/255.255.255.0
192.168.1.0-192.168.1.255
上一篇下一篇

猜你喜欢

热点阅读