Zabbix Documentation 4.0

2.23.04.04.2 (current)In development:4.4 (devel)Unsupported:1.82.02.43.23.4

User Tools

Site Tools


Sidebar

fr:manual:appendix:protocols:header_datalen

Table of Contents

4 En-tête

Aperçu

L'en-tête est présent dans les messages de réponse et de requête entre les composants Zabbix. L'en-tête consiste à :

<PROTOCOL> - "ZBXD" (4 octets)
<FLAGS>​ - le flag du protocole, (1 octet). 0x01 - protocole de communication Zabbix, 0x02 - compression).
<DATALEN> - longueur des données (4 octets). 1 sera formaté de la manière suivante 01/00/00/00/00/00/00/00 (4 octets, nombre 32 bits au format little-endian)
<RESERVED>​ - reservé pour des extensions protocole (4 octets).

Lorsque la compression est activée (flag 0x02 ) les octets <RESERVED>​contiennent la taille des données non compressée, nombre 32 bits au format little-endian.

Pour ne pas épuiser (potentiellement) la mémoire, le protocole Zabbix est limité à accepter seulement 128 Mo dans une connexion.

Implémentation

Voici des extraits de code montrant comment ajouter un en-tête de protocole Zabbix aux “données” que vous voulez envoyer pour obtenir le “paquet” que vous devriez envoyer à Zabbix afin qu'il soit interprété correctement.

LangageCode
bash
printf -v LENGTH '%016x' "${#DATA}"
PACK=""
for (( i=14; i>=0; i-=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;
ou
$packet = "ZBXD\1" . pack('V', strlen($data)) . "\0\0\0\0" . $data;
Perl
my $packet = "ZBXD\1" . pack('<Q', length($data)) . $data;
ou
my $packet = "ZBXD\1" . pack('V', length($data)) . "\0\0\0\0" . $data;
Python
packet = "ZBXD\1" + struct.pack('<Q', len(data)) + data