python3 下调用zabbix api 获取多个机房的IP

根据工作的需要,需要查看监控中的所有ip,我们一共有三个机房,每个机房都部署了同样的zabbix监控

根据三个园区的 监控api的url 实现功能:不输入参数 显示所有ip 输入参数 ali yq m6 返回对应area的ip
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 17/9/13 上午8:47
# @Author  : lee
# @File    : zabbix_ip_3area.py
# @Software: PyCharm
# 说明: code后有'#'是测试时加的或者需要修改的code
# 用法:不输入参数 显示所有ip 输入参数 ali yq m6 返回对应area的ip

import json
import requests
import sys
import re

regex_IP = re.compile(r"\d+\.\d+\.\d+\.\d+") # 匹配ip  
class Zabbix_ip_3area(object):

    def __init__(self, area): # 只需一个参数
        self.area = area
        self.header = {"Content-Type": "application/json-rpc"}
        
    def get_Area_url(self):  # 这里根据用户传入的参数 返回不同的监控url
        if self.area == 'ali':
            url_head = 'zaali.ops.xxx.com.cn'
        elif self.area == 'm6':
            url_head = 'zam6.ops.xxx.com.cn'
        elif self.area == 'yq':
            url_head = '172.18.2.99'
        self.url_little = url_head
        url = 'http://%s/zabbix/api_jsonrpc.php'% url_head
        return url

    def get_token(self): # 获得token 并返回
        data = {"jsonrpc": "2.0",
                "method": "user.login",
                "params": {
                    "user": 'cccc',   #  用户名
                    "password": 'ccccccc',   #  密码
                },
                "id": 1,
                "auth": None
                }

        token = requests.post(url=self.get_Area_url(), headers=self.header, data=json.dumps(data))
        json_dict_token = json.loads(token.text)
        return json_dict_token['result']

    def get_3area_ips(self):  # 调用接口,获取 ip信息
        ip_list = []
        data = {
                "jsonrpc": "2.0",
                "method": "host.get",
                "params": {
                    "output": ["host",],

                },
                "auth":  self.get_token(), #调用之前的get_token()函数返回的 token
                "id": 1
            }
        hosts = requests.post(url=self.get_Area_url(), headers=self.header, data=json.dumps(data))
        get_3area_ips = json.loads(hosts.text)
        for ip in get_3area_ips['result']:
            ip_list.append(regex_IP.findall(ip['host']))   # 获取的值中偏偏有几个ip+汉字的字符,不知道谁挖的坑。。。
        print(ip_list)

if __name__ == "__main__":
    try:
        if len(sys.argv) == 1:
            for area in ['ali','yq','m6']:
                item = Zabbix_ip_3area(area)
                item.get_3area_ips()
        else:
            item = Zabbix_ip_3area(sys.argv[1])  # 用IDE工具运行会报错 terminal调用使用,可以使用下边的方法传值  
            # item = Zabbix_ip_3area('m6')    # 
            item.get_3area_ips()

    except:
        print('输入参数可能有问题,脚本的参数是 空 或者 ali、yq、m6')

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Seebug漏洞平台

Typecho 前台 getshell 漏洞分析

作者:LoRexxar'@知道创宇404实验室 0x01 简 述 Typecho是一个简单,轻巧的博客程序。基于PHP,使用多种数据库(Mysql,Pos...

364100
来自专栏友弟技术工作室

SQLAlchemy简单入门

SQlAlchemy简单使用 sqlalchemy介绍 SQLAlchemy的是Python的SQL工具包和对象关系映射器,让应用程序开发人员可以使用上SQL...

393100
来自专栏小樱的经验随笔

【经验分享】后台常用的万能密码

这万能密码好几年前就有了。我都不当回事,结果这次真派上用场了,还真进了后台了 网站后台万能密码就是在用户名与密码处都写入下列字符,如果知道管理员帐号的话直接添...

1.2K50
来自专栏逆向技术

C语言第十二讲,文件操作.

在操作系统中,我们的文档都称为文件.操作系统也为我们提供了接口进行操作.不同语言都是使用的相同的接口,只不过封装的上层接口不一样

54700
来自专栏Seebug漏洞平台

Typecho 前台 getshell 漏洞分析

Typecho是一个简单,轻巧的博客程序。基于PHP,使用多种数据库(Mysql,PostgreSQL,SQLite)储存数据。在GPL Version 2许可...

494120
来自专栏jouypub

修改MYSQL中group_concat的长度限制

在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,

1.4K20
来自专栏PHP在线

mysqli_stmt::get_result 方法的替代方案

作者:西瓜玩偶(racnil070512 at hotmail dot com) 我们都知道,在mysqli库中,通过 mysqli_stmt::execut...

358120
来自专栏python3

python configparser模块

['bitbucket.org', 'topsecret.server.com']

9420
来自专栏Java后端技术栈

Java多线程编程-(12)-单例模式几种写法的错与对

在所有的主流23中设计模式中,单例模式作为最简单也最容易理解也是使用最普遍的设计模式,他是一种对象创建模式,用于产生一个对象的具体实例,他可以确保系统中一个类只...

9120
来自专栏黑白安全

宽字节注入详解分析

简介  宽字节注入,它的作用可以绕过转义,也是绕过转义的其中一个办法  宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_...

65020

扫码关注云+社区

领取腾讯云代金券