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+'
')
        except Exception as e:     # 有的无法正向解析的设备报错后,保证程序正常运行
            print('cannot lookup')
            f2.write(host + '->' + 'nofound' + '
')
            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) + '
')
            except socket.herror as e:
                f2.write(i + '->' + 'nofound' + '
')
反向解析

三、结果

正向解析:host-ip.txt
servername->xxx.xxx.xxx.xxx
反向解析:ip-host.txt
172.xxx.xxx.xxx->bogon  
原文地址:https://www.cnblogs.com/ld1977/p/7152897.html