需求: 域名和ip的文件,由于域名不变,但是 nslookup 解析出来的 ip 有可能会变化,所以通过解析域名,将ip提取出来,替换原文件中ip地址
一、脚本内容
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#linux 的 nslookup 需要安装软件包 yum -y install bind-utils
import os,re,subprocess
def panduan_ip(ip):
'''
判断ip是不是合法的ip,加入解析ip解析不出来,将会返回None
:param ip:
:return:
'''
try:
a,b,c,d = ip.strip().split('.')
if 0 < int(a) < 255 and 0 < int(b) < 255 and 0 < int(c) < 255 and 0 < int(a) < 255:
return ip
#except Exception as e: #这个是python3的用法
except Exception,e: #这个是python2的用法
return None
yuming = ['sms.abc.com','qq.cgf.com','weixin.abc.com']
for i in yuming:
#将解析的ip提取出来
new_ip = subprocess.Popen('echo %s | nslookup | grep -v "#53" | grep "Address" | cut -d" " -f2 | sort |head -1' %i ,shell=True,stdout=subprocess.PIPE).stdout.read().strip()
if len(new_ip) == 0: continue #如果解析的ip为空,跳出这个循环
new_ip = panduan_ip(new_ip) #判断解析的ip是否是真实ip
if new_ip == None :continue
with open('aa.txt', 'r') as rf: #将源文件以读的模式打开
with open('aa1.txt', 'w') as wf: #打开新的文件
for line in rf.readlines():
if i in line:
#将源文件中的ip替换为解析出来的ip
line = re.sub('\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}', new_ip, line)
wf.write(line)
os.rename('aa1.txt', 'aa.txt')
脚本不足之处: 没有判断解析出来的ip和源文件中的ip在对应的域名下有无更改,直接将解析结果写入文件中
扩展:
获取ip地址也可以用socket
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import socket
yuming = ['sms.abc.com','qq.cgf.com','weixin.abc.com']
for i in yuming:
new_ip = socket.getaddrinfo(i,80)[0][4][0]
print(new_ip)
二、效果图