Python自动化运维学习笔记(三)

IP地址处理模块IPy

IPy是一个功能强大的第三方模块,它可以很好的辅助完成IP的规划或计算工作

IPy模块安装

首先进入虚拟环境,然后使用pip安装IPy模块

source bin/activate
pip install IPy
IP类常见方法

在日常使用中,常见的IP操作包括IP类型判断、IP转换、反向解析、输出网段地址等。

>>> from IPy import IP
>>> IP('10.0.0.0/8').version() ##判断ip为ipv4还是ipv6
4
>>> IP('192.168.0.0/24').len() ##判断网段的ip个数
256
>>> IP('8.8.8.8').iptype() ##判断ip是公网还是私网
'PUBLIC'
>>> IP('192.168.1.20').reverseNames() ##反向解析地址格式
['20.1.168.192.in-addr.arpa.']
>>> IP("8.8.8.8").int() ##将ip地址转换成整数格式
134744072
>>> IP('8.8.8.8').strHex() ##将ip地址转换成十六进制格式
'0x8080808'
>>> IP('8.8.8.8').strBin() ##将ip地址转换成二进制格式
'00001000000010000000100000001000'
>>> print(IP(0x8080808)) ##将十六进制转成IP格式
8.8.8.8
>>> print(IP('192.168.0.1').make_net('255.255.255.0')) ##将ip与掩码转换成网段格式
192.168.0.0/24
多网络计算方法

我们可以通过IPy模块来计算比较两个网段是否存在包含。重叠等关系,比如10.0.0.0/16网段不等于10.0.0.0/24网段。

>>> IP('10.0.0.0/24') > IP('10.0.0.0/16') ## 判断网段大小
True
>>> '192.168.1.100' in IP('192.168.1.0/24') ##判断ip是否在网段内
True
>>> IP('192.168.1.0/24') in IP('192.168.0.0/16') ##判断网段是否在网段内
True
>>> IP('192.168.0.0/16').overlaps('192.165.1.0') ##判断网段是否重叠,0不重叠,1重叠
0
>>> IP('192.168.0.0/16').overlaps('192.168.1.0')
1

DNS处理模块dnspython

dnspython模块是Python实现的一个DNS工具包,可以用于查询、传输并动态更新ZONE信息。在系统管理方面,dnspython包可以实现DNS服务监控以及解析结果的校验,用来替代linux系统中的nslookup以及dig等工具。

dnspython模块安装
pip install dnspython

dnspython模块中最常用的域名查询,它提供了一个DNS解析器类–resolver,使用resolver的query方法来实现域名的查询功能。query方法的定义如下:

query(self, qname, rdtype=1, rdclass=1, tcp=False, source=None, raise_on_no_answer=True, source_port=0)
其中,qname表示待查询的域名;rdtype用来指定待查询的类型,如A记录、MX记录、NS记录等;rdclass用来指定网络类型,如IN、CH、HS等,默认为IN;tcp用来指定查询时是否使用TCP协议,默认为False;source和source_port用于指定查询源地址与端口,默认为查询设备IP和0端口;raise_on_no_answer用来指定当查询无应答时是否触发异常。

查询A记录

>>> import dns.resolver
>>> A = dns.resolver.query('www.163.com','A') ##指定查询域名以及A类型
>>> for i in A.response.answer:  ##获取查询回应信息
...     for j in i.items: ## 遍历回应信息
...         if isinstance(j, dns.rdtypes.IN.A.A): ##如果是A记录类型,则输出地址
...             print(j.address)
...         if isinstance(j, dns.rdtypes.ANY.CNAME.CNAME): ##如果是CNAME记录,则直接输出
...             print('CNAME: %s' % j)
... 
CNAME: www.163.com.lxdns.com.
36.25.241.153

实际上现在很多域名都是CNAME形式,想要获取相应的IP需要先获取对应的DNS“别名”。因此,在测试程序中加入对类型的判断。

MX记录查询
>>> MX = dns.resolver.query('163.com','MX') ##指定查询域名以及MX类型
>>> for i in MX:
...     print("MX preference =%d,mail exchanger=%s" %(i.preference,i.exchange))
...
MX preference =10,mail exchanger=163mx01.mxmail.netease.com.
MX preference =50,mail exchanger=163mx00.mxmail.netease.com.
MX preference =10,mail exchanger=163mx03.mxmail.netease.com.
MX preference =10,mail exchanger=163mx02.mxmail.netease.com.
>>> 
NS记录查询
>>> NS = dns.resolver.query('163.com','NS') ##输入待查询域名以及NS记录,只限输入一级域名
>>> for i in NS.response.answer:
...     for j in i.items:
...         print(j.to_text()) ##输出结果
... 
ns6.nease.net. 
ns5.nease.net.
ns8.166.com.
ns2.166.com.
ns1.nease.net.
ns3.nease.net.
ns4.nease.net.
>>> NS = dns.resolver.query('www.163.com','NS') ##如果输入二级域名或者多级,则会报错
Traceback (most recent call last):
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值