公司最近接手的一家跨国企业的项目,该企业单域、多站点,且遍布美国、巴西、日本、东京、新加坡等多个国家,服务器及客户端计算机数量庞大。由于处理一些特殊故障,需要找出一些不在域中的网络设备及存储、NBU等在DNS服务器中是否有正向解析与反向解析的记录,手工查看限于数量较多无法实现,因此想到了编写了Python脚本。
一、 功能描述:
1. 分为两个功能,正向解析与反向解析
2. 正向解析查询,根据文件中写入的设备或机器名称,查询IP地址,并打开host-ip.txt,以host->ip的格式写入该文件,无法解析的,使用host->nofound写入。
3. 反向解析查询,根据正向解析中查询结果文件host->ip.txt,截取IP地址部分,然后以ip->host格式写入该文件,无法解析的,还是使用ip-nofound写入。
二、代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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