Zabbix Documentation 4.4

3.04.04.4 (current)| In development:5.0 (devel)| Unsupported:1.82.02.22.43.23.44.2Guidelines

User Tools

Site Tools


Sidebar

manual:appendix:protocols:header_datalen

This is an old revision of the document!


4 Header and data length

Overview

Header and data length are present in response and request messages between Zabbix components. It is required to determine the length of message.

<HEADER> - "ZBXD\x01" (5 bytes)
<DATALEN> - data length (8 bytes). 1 will be formatted as 01/00/00/00/00/00/00/00 (eight bytes, 64 bit number in little-endian format)

To not exhaust memory (potentially) Zabbix protocol is limited to accept only 128MB in one connection.

Implementation

Here are code snippets showing how to add Zabbix protocol header to the data you want to send in order to obtain packet you should send to Zabbix so it is interpreted correctly.

LanguageCode
bash
printf -v LENGTH '%016x' "${#DATA}"
PACK=""
for i in {14..0..-2}; do PACK="$PACK\\x${LENGTH:$i:2}"; done
printf "ZBXD\1$PACK%s" $DATA
Java
byte[] header = new byte[] {
	'Z', 'B', 'X', 'D', '\1',
	(byte)(data.length & 0xFF),
	(byte)((data.length >> 8) & 0xFF),
	(byte)((data.length >> 16) & 0xFF),
	(byte)((data.length >> 24) & 0xFF),
	'\0', '\0', '\0', '\0'};
 
byte[] packet = new byte[header.length + data.length];
System.arraycopy(header, 0, packet, 0, header.length);
System.arraycopy(data, 0, packet, header.length, data.length);
PHP
$packet = "ZBXD\1" . pack('P', strlen($data)) . $data;
or
$packet = "ZBXD\1" . pack('V', strlen($data)) . "\0\0\0\0" . $data;
Perl
my $packet = "ZBXD\1" . pack('<Q', length($data)) . $data;
or
my $packet = "ZBXD\1" . pack('V', length($data)) . "\0\0\0\0" . $data;
Python
packet = "ZBXD\1" + struct.pack('<Q', len(data)) + data