侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

使用Python来处理IP和DNS

zze
zze
2020-07-30 / 0 评论 / 1 点赞 / 359 阅读 / 3647 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

IPy

介绍

IPy 模块包含 IP 类,使用它可以方便处理绝大部分格式为 IPv4 和 IPv6 的网络地址。

安装:pip3 install ipy

使用案例

>>> from IPy import IP
>>> ip_obj = IP('10.0.1.0/28')
# 查看 IP 协议版本
>>> ip_obj.version()
4
# 查看网段可承载的 IP 地址数量
>>> ip_obj.len()
16
# 查看网段可使用的 IP 地址
>>> [ip for ip in ip_obj]
[IP('10.0.1.0'), IP('10.0.1.1'), IP('10.0.1.2'), IP('10.0.1.3'), IP('10.0.1.4'), IP('10.0.1.5'), IP('10.0.1.6'), IP('10.0.1.7'), IP('10.0.1.8'), IP('10.0.1.9'), IP('10.0.1.10'), IP('10.0.1.11'), IP('10.0.1.12'), IP('10.0.1.13'), IP('10.0.1.14'), IP('10.0.1.15')]
# 判断一个 IP 是否在网段范围内
>>> '10.0.1.30' in ip_obj
False
# 判断一个网段是否被包含在另一个网段中
>>> IP('192.168.1.0/24') in IP('192.168.0.0/16')
True
# 查看网络号
>>> ip_obj.net()
IP('10.0.1.0')
# 查看广播地址
>>> ip_obj.broadcast()
IP('10.0.1.15')
# 查看掩码
>>> ip_obj.netmask()
IP('255.255.255.240')
# 以二进制格式显示地址
>>> ip_obj.strBin()
'00001010000000000000000100000000'
# 以单个十进制整形数字显示地址
>>> ip_obj.int()
167772416
# 以 16 进制显示地址
>>> ip_obj.strHex()
'0xa000100'
# 判断地址是共有地址还是私有地址
>>> ip_obj.iptype()
'PRIVATE'
# 以不同格式输出网络地址
>>> ip_obj.strNormal(0)
'10.0.1.0'
>>> ip_obj.strNormal(1)
'10.0.1.0/28'
>>> ip_obj.strNormal(2)
'10.0.1.0/255.255.255.240'
>>> ip_obj.strNormal(3)
'10.0.1.0-10.0.1.15'
# 反解 IP 地址
>>> IP('223.5.5.5').reverseNames()
['5.5.5.223.in-addr.arpa.']
# 根据网络地址和掩码组装完整的网络地址
>>> IP('192.168.1.0').make_net('255.255.255.0')
IP('192.168.1.0/24')
# 以十进制格式显示掩码
>>> IP('192.168.1.0/255.255.255.0',make_net=True)
IP('192.168.1.0/24')
# 根据地址范围计算网络地址
>>> IP('192.168.1.0-192.168.1.255',make_net=True)
IP('192.168.1.0/24')
# 判断两个网段的范围是否存在重叠,其中 1 表示存在重叠,0 表示不存在重叠
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1
>>> IP('192.168.1.0/24').overlaps('192.168.2.0')
0

dnspython

介绍

dnspython 是 Python 实现的一个 DNS 的工具包,可以用于查询、传输并动态更新 ZONE 信息,支持 TSIG(事务签名)验证消息和 EDNS0(扩展 DNS)。在系统管理方面,我们可以利用查询功能来实现 DNS 服务监控以及解析结果的校验。

安装:pip3 install dnspython

使用案例

A 记录的查询:

import dns.resolver

a_resp = dns.resolver.resolve('www.zze.xyz','A')

for i in a_resp.response.answer:
    for j in i.items:
        print(j.address)
'''
94.191.122.126
'''

MX 记录的查询:

import dns.resolver

domain = '163.com'

MX = dns.resolver.resolve(domain, 'MX')
for i in MX:
    print('MX preference =', i.preference, 'mail exchanger =', i.exchange)

'''
MX preference = 10 mail exchanger = 163mx02.mxmail.netease.com.
MX preference = 10 mail exchanger = 163mx03.mxmail.netease.com.
MX preference = 10 mail exchanger = 163mx01.mxmail.netease.com.
MX preference = 50 mail exchanger = 163mx00.mxmail.netease.com.
'''

NS 记录的查询:

import dns.resolver

domain = 'baidu.com'
ns = dns.resolver.resolve(domain, 'NS')
for i in ns.response.answer:
    for j in i.items:
        print(j.to_text())

'''
dns.baidu.com.
ns2.baidu.com.
ns7.baidu.com.
ns4.baidu.com.
ns3.baidu.com.
'''

CNAME 记录的查询:

import dns.resolver

domain = 'www.baidu.com'

cname = dns.resolver.resolve(domain, 'CNAME')
for i in cname.response.answer:
    for j in i.items:
        print(j.to_text())

'''
www.a.shifen.com.
'''
1

评论区