利用Python脚本获取zabbix版本信息

5.1 问题

编写一个zabbix_apiversion.py脚本,实现以下功能:

  1. 安装zabbix服务器
  2. 获取zabbix api的url
  3. 编写python程序,访问zabbix api,取得zabbix版本号

5.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装zabbix服务器

安装zabbix服务器具体步骤请参照NSD SECURITY DAY06 cookbook中案例2操作

步骤二:获取zabbix api的url

1)设置前端后,你就可以使用远程HTTP请求来调用API。为此,需要向api_jsonrpc.php位于前端目录中的文件发送HTTP POST请求。如果你的Zabbix前端安装在http://192.168.4.2/zabbix,那么用HTTP请求来调用apiinfo.version方法就如下面这样:

copytextpop-up
 
  1. POST 192.168.4.2/zabbix/api_jsonrpc.php HTTP/1.1
POST 192.168.4.2/zabbix/api_jsonrpc.php HTTP/1.1

2)从zabbix官方文档中获取 Zabbix API 版本,如图-7所示:

官方文档地址如下:

https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/apiinfo/version

利用Python脚本获取zabbix版本信息_第1张图片

图-13

步骤三:编写脚本

在HTTP协议中,post提交的数据必须放在消息主体中,但是协议中并没有规定必须使用什么编码方式,从而导致了提交方式的不同。服务端根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。

请求的 Content-Type 头部必须设置为以下值之一:

application/json-rpc

application/json

application/jsonrequest

copytextpop-up

[root@localhost day12]# vim zabbix_apiversion.py
#!/usr/bin/env python3

import requests
import json    # python中的dict类型要转换为json格式的数据需要用到json库

#要访问的网址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#请求头部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是从官方文档处获得的
data = {
"jsonrpc": "2.0",    #jsonrpc协议的版本号,固定的
"method": "apiinfo.version",        #在zabbix手册上查到的,查询zabbix版本
"params": [],        #没有额外参数
"id": 1    #随便写个数字
}

#使用requests发送请求,访问指定网站,向url发送data请求,r收到的返回响应为json格式
#将data转成json格式,zabbix要求提交的数据是json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
#将json格式解码,zabbix返回的数据都是json格式
print(r.json()))
[root@localhost day12]# vim zabbix_apiversion.py
#!/usr/bin/env python3

import requests
import json	# python中的dict类型要转换为json格式的数据需要用到json库

#要访问的网址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#请求头部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是从官方文档处获得的
data = {
    "jsonrpc": "2.0",	#jsonrpc协议的版本号,固定的
    "method": "apiinfo.version",		#在zabbix手册上查到的,查询zabbix版本
    "params": [],		#没有额外参数
    "id": 1	#随便写个数字
}

#使用requests发送请求,访问指定网站,向url发送data请求,r收到的返回响应为json格式
#将data转成json格式,zabbix要求提交的数据是json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
#将json格式解码,zabbix返回的数据都是json格式
print(r.json()))

需要注意的是python中并没有json类型这一说法,通过json.dumps(data)转换的字典对象,最后得到的是一个字符串对象,也就是说,在python中json格式的数据实际上就是一个字符串

步骤四:测试脚本执行

copytextpop-up

[root@localhost day12]# python3 zabbix_apiversion.py
{"jsonrpc": "2.0", "result": "2.4.0", "id": 1}

你可能感兴趣的:(Python,Python脚本,Devops)