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 ...
随机推荐
- java接口调用——webservice就是一个RPC而已
很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...
- Win7系统卸载McAfee杀毒软件
方法一.用系统正常卸载程序卸载. 首先,在服务里将McAfee相关的所有服务“禁用”. 然后, Windows“控制面板”中的“添加/删除程序”卸载 McAfee Consumer 产品. 接着,到C ...
- 20款 JavaScript 开发框架推荐给前端开发者
下面,我们给大家提供了一个用于 HTML5 开发的各种用途的 JavaScript 库列表.这些框架能够给前端开发人员提供更好的功能实现的解决方案.如果你有收藏优秀的框架,也可以在后面的评论中分享给我 ...
- Android中使用Notification实现普通通知栏(Notification示例一)
Notification是在你的应用常规界面之外展示的消息.当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏.要查看消息的详情需要进入通知抽屉(notificationdrawer) ...
- android的消息提示(震动与提示音)
protected AudioManager audioManager; protected Vibrator vibrator; audioManager = (AudioManager)getSy ...
- UIMenuItem
UIMenuItem *share = [[UIMenuItem alloc] initWithTitle:@"分享"action:@selector(shareClick:)]; ...
- 移动端嵌入pdf.js远程请求pdf出现(206)
最近在做移动端的开发,需要嵌入pdf进行预览.看了很多的js组件后选择了pdf.js:使用起来还是比较方便的,至于使用网上有很多的教程. 但在使用过程中出现了如下一个问题(我做的是IOS系统): 问题 ...
- ubuntu 16 安装django nginx uWSGI
参考 https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and- ...
- ZooKeeper:第三方客户端 ZKClient
ZKClient ZKClient的设计 ZKClient组件说明 重要的处理流程说明 启动ZKClient 为节点注册Watcher ZooKeeper的变更操作 客户端处理变更 序列化处理 ZKC ...
- PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
1.错误类型:PHP致命错误 Error type: PHP Fatal error Fatal error: Cannot redeclare (a) (previously declared in ...