利用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

圖-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}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章