Python 对接微软DNS域名解析操作

背景

由于我们很多公司都使用了微软的AD域控系统,同时AD域控系统也自带了DNS服务,但是这里就出现一种情况,就是当我们需要进行各种域名的解析的操作时,就需要远程登陆到AD域控服务器进行操作,这种频繁登录服务器也存在一定的安全隐患,同时对于管理域名解析等资源也不方便,针对这个问题,我们可以对接微软DNS相关接口功能来进行自助化操作。

启用WinRM

由于微软并没有开通DNS相关操作的API接口,而我们需要通过python进行对接,则可通过python远程执行相关的dns操作命令的方式实现,因此需要开通windows服务器的winrm服务,同时打开winrm服务的baisc认证。

1、登录Windows服务器,并以管理员身份运行powershell

Python 对接微软DNS域名解析操作

在命令行上运行 winrm quickconfig。

Python 对接微软DNS域名解析操作

执行 winrm enumerate winrm/config/listener 命令确认结果。

Python 对接微软DNS域名解析操作

设定为Basic认证。

可以执行下条两命令开通Basic认证,注意有单引号

C:\> winrm set winrm/config/service '@{AllowUnencrypted="true"}'
C:\> winrm set winrm/config/service/auth '@{Basic="true"}'

执行 winrm get winrm/config 命令确认结果。

Python 对接微软DNS域名解析操作

2、安装pywinrm

使用pip3命令安装pywinrm模块。

pip3 install pywinrm

3、pywinrm使用

安装好了pywinrm后,我们就可以使用其来远程连接到windows服务器,并执行远程命令。

1、初始化连接

session = winrm.Session(服务器IP, auth=(用户名, 密码))

2、执行远程命令

可以通过run_cmd方法来执行我们提供的远程命令,并对输出进行编码,如下所示:

session.run_cmd("dnscmd /zoneinfo qianhaitest.com").std_out.decode('utf-8')

4、DNS操作

对于DNS的操作,使用的是微软提供的dnscmd命令服务,官方文档如下:Dnscmd | Microsoft Learn

1、添加解析记录

# 添加NS记录
session.run_cmd("dnscmd /recordadd test.com aa NS bb.test.com").std_out.decode('utf-8')
# 添加A记录
session.run_cmd("dnscmd /recordadd test.com cc A 10.60.0.1").std_out.decode('utf-8')

2、删除解析记录

# 注意,一定在后面添加/f,要不然不会执行
session.run_cmd("dnscmd /recorddelete test.com aa NS bb.test.com /f").std_out.decode('utf-8')

3、列出所有的zone

session.run_cmd("dnscmd /enumzones /Primary").std_out.decode('utf-8')

更多的操作,可以查看微软提供的dnscmd文档

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/2262

Previous 2024年9月13日
Next 2024年10月8日

相关推荐