Zabbix协议分析
概述
Zabbix使用一种自定义的基于TCP的协议与客户端进行通信
Zabbix <- TCP -> Zabbix agent
协议内容
<HEADER> - "ZBXD\x01" ( bytes)
<DATALEN> - data length ( bytes). will be formatted as /////// (eight bytes in HEX, bit number)
<DATA>
<DATA>: json格式,内容又分为主动检查和被动检查
为了避免Zabbix内存耗尽,Zabbix限制每个连接最多使用128M内存
被动检查
Server request
<item key>\n
Agent response
<HEADER><DATALEN><DATA>[\<ERROR>]
[]是可选的仅在不支持的items时发送
主动检查
(1)获取相关items的列表
Agent request
<HEADER><DATALEN>{
"request":"active checks",
"host":"<hostname>"
}
Server response
<HEADER><DATALEN>{
"response":"success",
"data":[
{
"key":"agent.version",
"delay":,
"lastlogsize":,
"mtime":
},
{
"key":"vfs.fs.size[/nono]",
"delay":,
"lastlogsize":,
"mtime":
}
]
}
(2)发送收集的数据
Agent send
<HEADER><DATALEN>{
"request":"agent data",
"data":[
{
"host":"<hostname>",
"key":"agent.version",
"value":"2.4.0",
"clock":,
"ns":
},
{
"host":"<hostname>",
"key":"vfs.fs.size[/nono]",
"state":,
"value":"Cannot obtain filesystem information: [2] No such file or directory",
"clock":,
"ns":
}
],
"clock": ,
"ns":
}
Server response
<HEADER><DATALEN>{
"response":"success",
"info":"processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
Zabbix Trapper发生在主动检查的第二个步骤,Agent发送数据到Server(zabbix_sender),Trapper items必须事先定义好
python模拟的zabbix_sender
#!/usr/bin/python
#-*- coding:utf8 -*-
__author__ = 'pdd'
__date__ = '2016/11/28' ''' script simulate zabbix_sender ''' import sys
import json
import time
import struct
import socket
import argparse parser = argparse.ArgumentParser(description='script simulate zabbix_sender')
parser.add_argument('-z','--server',dest='server',action='store',help='Zabbix server ip')
parser.add_argument('-p','--port',dest='port',action='store',help='Zabbix server port',default=10051,type=int)
parser.add_argument('-s','--host',dest='host',action='store')
parser.add_argument('-k','--key',dest='key',action='store',help='item key')
parser.add_argument('-o','--value',dest='value',action='store',help='item value')
args = parser.parse_args() class Metric(object):
def __init__(self, host, key, value):
self.host = host
self.key = key
self.value = value def __repr__(self):
result = 'Metric(%r, %r, %r)' % (self.host, self.key, self.value)
return result def send_to_zabbix():
j = json.dumps
m = Metric(args.host, args.key, args.value)
clock = ('%d' % time.time())
metrics = '{"host":%s,"key":%s,"value":%s,"clock":%s}' % (j(m.host), j(m.key), j(m.value), j(clock))
json_data = '{"request":"sender data","data":[%s]}' % metrics
data_len = struct.pack('<Q', len(json_data))
packet = 'ZBXD\x01' + data_len + json_data
try:
zabbix = socket.socket()
zabbix.connect((args.server, args.port))
zabbix.sendall(packet)
resp_hdr = zabbix.recv(13)
resp_body_len = struct.unpack('<Q', resp_hdr[5:])[0]
resp_body = zabbix.recv(resp_body_len)
zabbix.close()
resp = json.loads(resp_body)
print(resp)
except:
print('Error while sending data to Zabbix') if __name__=='__main__':
send_to_zabbix()
运行

参考:
https://www.zabbix.com/documentation/3.0/manual/appendix/items/activepassive
https://www.zabbix.org/wiki/Docs/protocols/zabbix_sender/2.0
Zabbix协议分析的更多相关文章
- Zabbix 漏洞分析
之前看到Zabbix 出现SQL注入漏洞,自己来尝试分析. PS:我没找到3.0.3版本的 Zabbix ,暂用的是zabbix 2.2.0版本,如果有问题,请大牛指点. 0x00 Zabbix简介 ...
- Google的Protobuf协议分析
protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文出现的PB代表protobuf). Github:https://github.com/google/protobuf 上图 ...
- 蓝牙协议分析(7)_BLE连接有关的技术分析
转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connec ...
- 协议分析TMP
最近闲来有事, 分析了一个非常低端(非常低端的意思是说你不应该对她是否能取代你现有的QQ客户端作任何可能的奢望,她只是一个实验性的东西)的手机QQ的协议, 是手机QQ3.0, 所用到的TCP ...
- 协议分析 - DHCP协议解码详解
协议分析 - DHCP协议解码详解 [DHCP协议简介] DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
- Thrift的TCompactProtocol紧凑型二进制协议分析
Thrift的紧凑型传输协议分析: 用一张图说明一下Thrift的TCompactProtocol中各个数据类型是怎么表示的. 报文格式编码: bool类型: 一个字节. 如果bool型的字段是结构体 ...
- BT协议分析(1)—1.0协议
简述 BT下载是采用P2P的下载方式,下载的大致形式采用如下图所示,处于图示中心的称为Tracker服务器,其余称为Peer. 缺点 1.资源的安全性 2.资源的实效性(没有上传者则BT也将失效) ...
- Memcache的使用和协议分析详解
Memcache的使用和协议分析详解 作者:heiyeluren博客:http://blog.csdn.NET/heiyeshuwu时间:2006-11-12关键字:PHP Memcache Linu ...
随机推荐
- angular $http请求
angular使用post.get向后台传参的问题 一.问题的来源 我们都知道向后台传参可以使用get.put,其形式就类似于name=jyy&id=001.但是在ng中我却发现使用$http ...
- JavaScript中数据类型转换总结
JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...
- jQuery flickity 滑动触屏
flickity是一款自适应手机触屏滑动插件,它的API参数很丰富,包括对齐方式.循环滚动.自动播放.是否支持拖动.是否开启分页.是否自适应窗口等. 在线实例 实例演示 使用方法 <div cl ...
- dotnet core 使用 MongoDB 进行高性能Nosql数据库操作
好久没有写过Blog, 每天看着开源的Java社区流口水, 心里满不是滋味. 终于等到了今年六月份 dotnet core 的正式发布, 看着dotnet 社区也一步一步走向繁荣, 一片蒸蒸日上的大好 ...
- iOS空心圆下载进度指示器控件
self.layer = [CAShapeLayer layer]; self.layer.frame = CGRectMake(, , , ); self.layer.position = self ...
- Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础语法
就在昨天终于做了gtest的分享,我的预研工作终于结束了,感觉离我辞职的日子不远了,毕竟是专注java二百年啊,要告别实习啦.. 这篇是GoogleMock的简介文档,会在后边附带一个自己的例子. 一 ...
- android 之 启动画面的两种方法
现在,当我们打开任意的一个app时,其中的大部分都会显示一个启动界面,展示本公司的logo和当前的版本,有的则直接把广告放到了上面.启动画面的可以分为两种设置方式:一种是两个Activity实现,和一 ...
- Oracle学习笔记二 初识Oracle(二)
Windows 中的 Oracle 服务 Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理 “服务 ...
- war 文件打包技巧
1.首先是工具比如Eclipse很方便了. 2.用winrar之类的工具,把web-info目录,及跟它同级的所有目录及文件,打包成 zip文件就行了,然后把扩展名改成war! 3 Jar命令: 假定 ...
- shell脚本实现算术运算且输入的不能为非数字的值
#!/bin/bash c= ] do echo "请输入第一个数" read a echo "请输入第二个数" read b ]* ]] && ...