批量监测dns是否可用脚本,不可用时并切换

摘要:
type=13&gid=199&msg=%s“%infotry:r=requests.getexcept:passif_name__==”__main__“:TAG=0#标志位,0正常,其他异常DNS=[”202.106.0.20“,”119.29.29.29“,”223.5.5.5“]obj=DnsHelper()whileTrue:foriinrange:#状态是否为0两次,0正常或其他异常状态=obj.checkStatussprintifstatus!
#!/usr/bin/env python
# coding=utf-8
# hexm@2016-02-14

import time
import requests
import paramiko
import subprocess
import requests

HOST = (
        "10.88.2.182:22",
     "10.88.2.183:22",
    "10.88.2.184:22"
)
class DnsHelper(object):

    def checkStatus(self, dns):
        '''
        检查状态
        '''
        status = subprocess.call('/usr/bin/dig www.baidu.com @%s +time=1 &> /dev/null' % dns, shell=True)
        return status

    def modifyStatus(self):
        NS = "nameserver %s
nameserver %s
nameserver %s" % (DNS[0], DNS[1], DNS[2])
        cmd = "echo "%s" > /etc/resolv.conf" % NS
        self.exec_command(cmd)

    def exec_command(self, cmd):
        '''
        远程连接修改

        '''
        private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        for host in HOST:
            h,p = host.strip().split(':')
            try:
                ssh.connect(hostname=h, port=int(p), username='root', pkey=private_key, timeout=1)
                stdin, stdout, stderr = ssh.exec_command(cmd)
            except:
                continue
            ssh.close()
        self.alarm("切换dns为%s成功" % DNS[0])

    def alarm(self, info):
        url = "http://alarm.mingxiao.com/alarm/index.php?type=13&gid=199&msg=%s" % info 
        try:
            r = requests.get(url)
        except:
            pass

if __name__ == "__main__":
    TAG = 0  # 标志位,0正常,其他不正常
    DNS = ["202.106.0.20", "119.29.29.29", "223.5.5.5"]

    obj = DnsHelper()
    while True:
        for i in range(2):  # 两次次状态是否为0, 0正常,其他不正常
            status = obj.checkStatus(DNS[0])
        print(status,TAG,DNS)
            if status != 0:
                TAG += 1
            time.sleep(10) 
        if TAG != 0:  # 检测一次不正常,切换dns
            TAG = 0
            obj.alarm('DNS %s 检测不正常,正在切换' % DNS[0])
            DNS.append(DNS[0])  
            DNS.remove(DNS[0])  # 不正常的DNS放到末尾,
            status = obj.checkStatus(DNS[0])  # 检查新DNS是否正常
            if status == 0:  # 正常则切换dns
                obj.modifyStatus()
                #TAG = 0
    time.sleep(300)

免责声明:文章转载自《批量监测dns是否可用脚本,不可用时并切换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇开源EDR(OSSEC)MATLAB 实用函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

树莓派3B+(一)

一:安装raspbian系统   介绍:Raspbian是为树莓派设计,基于Debian的操作系统,由一个小团队开发。其不隶属于树莓派基金会,但被列为官方支持的操作系统。   下载地址:https://www.raspberrypi.org/downloads/ (建议用IDM下会快一点)   IDM破解 永久有效链接: https://pan.baidu...

安装rac遇到的问题总结:

1. 选择虚拟机工具   这个过程是非常的波折。这次安装也让我吸取了很大教训,获得了宝贵经验。   首先啊,必须了解rac的机制。   共享磁盘+多实例。   这就意味着,我们必须使用一个支持共享磁盘的虚拟机。   第一次我使用了workstation,竟然安装了2组磁盘。。多么可笑哇。羞~   其实也有人说workstation可以配置共享磁盘...

七牛云配置二级域名

七牛云图床默认的域名30天后会失效,连带着 图片也会失效,因此需要自定义一个已备案的域名。同时,域名解析不能使用主域名进行解析,会发生冲突。因此创建二级域名作为图床域名使用。 那么为了解决这个问题,我们就需要给七牛云配置我们自己的域名来访问里面存储的文件,那么我们正式开始吧! 添加域名 1.选择绑定域名 在七牛云的控制面板中我们选择绑定域名在加速域名这一栏...

Linux网络配置命令介绍【转】

方法/步骤 1 在接下来的讲解中,讲解的Linux网络配置和网络诊断的命令有: ifconfig、ping、netstat、traceroute、dig和nslookup、host、hostname、route、arp、ethtool、GUI管理命令system-config-network。   2 第一个命令ifconfig,这个命令可以...

python paramiko 模块

1.什么是paramiko? paramiko模块提供了基于ssh连接,进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。 pip homepage: http://www.paramiko.org/ pip github addr: https://github.com/paramiko 官方推荐安装方法: pip...

Ubuntu安装SSH和SFTP Windows与Ubuntu Linux互传文件

Ubuntu安装SFTP和安装SSH可以一部完成,即:安装好了SSH就可以用SFTP连接了。 安装SSH sudo apt-get install openssh-server 查看SSH是否启动 sudo ps -e | grep ssh 设置ssh开机启动(这一步可选,一般安装好之后默认就是开机启动) # 开机自动启动ssh命令 sudo system...