首页 > 代码库 > Python3.6正向解析与反向解析域中主机

Python3.6正向解析与反向解析域中主机

  公司最近接手的一家跨国企业的项目,该企业单域、多站点,且遍布美国、巴西、日本、东京、新加坡等多个国家,服务器及客户端计算机数量庞大。由于处理一些特殊故障,需要找出一些不在域中的网络设备及存储、NBU等在DNS服务器中是否有正向解析与反向解析的记录,手工查看限于数量较多无法实现,因此想到了编写了Python脚本。

一、 功能描述:

1. 分为两个功能,正向解析与反向解析

2. 正向解析查询,根据文件中写入的设备或机器名称,查询IP地址,并打开host-ip.txt,以host->ip的格式写入该文件,无法解析的,使用host->nofound写入。

3. 反向解析查询,根据正向解析中查询结果文件host->ip.txt,截取IP地址部分,然后以ip->host格式写入该文件,无法解析的,还是使用ip-nofound写入。

二、代码

技术分享
import socket
ho_list = []  # 用于保存文件读取内容的机器名,列表类型
with open(hostna.txt,r) as f1:
    for i in f1.readlines():
        # print(i)
        ho_list.append(i.strip())
print(ho_list)

with open(host-ip.txt,w) as f2:
    for host in ho_list:
        print(host)
        try:
            ip = socket.getaddrinfo(host,None)[0][4][0] # 只保留IP部分
            # print(ip)
            f2.write(host+->+ip+\n)
        except Exception as e:     # 有的无法正向解析的设备报错后,保证程序正常运行
            print(cannot lookup)
            f2.write(host + -> + nofound + \n)
            continue
正向解析
技术分享
import socket
ip_list = []   # 用于保存读取文件中的IP地址部分,类型列表
with open(host-ip.txt,r) as f1:
    for i in f1.readlines():
        sp = i.split(->)[1]
        # print(i.split(‘->‘)[1])
        ip_list.append(sp.strip())
# print(ip_list)
with open(ip-host.txt,w) as f2:
    for i in ip_list:
        print(i)
        if i == nofound:
            continue
        else:
            try:
                host = socket.gethostbyaddr(i)[0]  # 只取主机名部分
                f2.write(i + -> + str(host) + \n)
            except socket.herror as e:
                f2.write(i + -> + nofound + \n)
反向解析

三、结果

正向解析:host-ip.txt
servername->xxx.xxx.xxx.xxx
反向解析:ip-host.txt
172.xxx.xxx.xxx->bogon  

Python3.6正向解析与反向解析域中主机