Aller au contenu
Sylvain Joffraud l4w
Retour

Tracker GPS chinois : identifier le protocole par sniff hex

Un tracker GPS 4G acheté sur AliExpress, étiqueté famille <vendeur> clairement reconnaissable. Je configure le serveur Traccar sur le port officiel de ce protocole <vendeur>. Le tracker se connecte (vérifié par netstat ESTABLISHED), envoie un paquet, puis Traccar ferme la connexion immédiatement sans rien logger.

Pas un seul log d’erreur. Le tracker boucle en se reconnectant. Le device est bien déclaré dans Traccar admin avec son IMEI. Aucun message d’erreur côté serveur.

Symptôme

$ docker exec traccar netstat -tn | grep :5174
tcp  0  0  10.0.0.5:5174  78.x.x.x:24287  TIME_WAIT

TIME_WAIT = Traccar a fermé. À chaque cycle (~30s), même séquence : SYN+ACK, le tracker envoie ~60 octets, Traccar ack puis FIN.

Aucune trace dans docker logs traccar. Aucun « Unknown device », aucune erreur de parsing.

Cause

Le tracker, malgré son nom commercial appartenant à une famille protocolaire identifiée, parle un autre protocole au niveau wire. Les noms de produits trackers chinois (familles MiCODUS, Concox, Eelink…) sont des labels marketing, pas des spécifications protocolaires. Beaucoup utilisent en réalité du JT808 (le standard chinois national pour véhicules GPS).

Le serveur reçoit le paquet, ne trouve pas la signature du protocole qu’il écoute sur ce port, ne sait pas répondre, ferme proprement (RFC-compliant) — d’où le silence en log.

Solution — décoder le 1er paquet à la main

sudo tcpdump -nn -i any -xx 'tcp port 5174 and src host <ip-tracker> and tcp[tcpflags] & tcp-push != 0' | head -30

Le payload commence après l’en-tête TCP. Premier octet du payload = signature protocolaire :

Premier(s) octet(s)Protocole probable
0x78 0x78GT06 (Concox classique)
0x7eJT808 (standard chinois GPS véhicule)
[XX*ID*OK / Watch protocol (montres enfants)
0x40 0x40Topflytech / autres
*HQ,...Megastek / HQ
Texte ASCII propre type imei:...,...TK103 et dérivés

Avec un paquet JT808, structure typique :

7e 01 00 00 2d 01 91 76 77 59 99 00 2c ...
 │  └─┘ └─┘ └────────────┘
 │   │   │   └── device ID BCD (6 octets = 12 digits)
 │   │   └──── body length
 │   └────── message ID (0x0100 = registration terminal)
 └── delimiter de trame

Une fois le vrai protocole identifié, configurer Traccar pour écouter ce protocole sur le port utilisé par le tracker (cf [[73-traccar-forcer-protocole-sur-port-precis]]).

Lessons learned

#gps #traccar #iot #troubleshooting #networking #tcpdump #devops #reverse-engineering


Partager cet article :

Article précédent
JT808 : l’ID du device est 12 chiffres BCD, pas 11
Article suivant
Le piège RCS : configurer un device GSM-only en SMS