
Dump1090 est un simple décodeur Mode S pour les appareils RTLSDR
Dump 1090 est un décodeur Mode S spécialement conçu pour les périphériques RTLSDR.
Les principales fonctionnalités sont :
Tapez "make".
Pour capturer le trafic directement depuis votre périphérique RTL et afficher le trafic capturé sur la sortie standard, exécutez simplement le programme sans aucune option :
./dump1090
Pour simplement afficher les messages hexadécimaux :
./dump1090 --raw
Pour exécuter le programme en mode interactif :
./dump1090 --interactive
Pour exécuter le programme en mode interactif, avec le support réseau, et connecter votre navigateur à http://localhost:8080 pour voir le trafic en direct :
./dump1090 --interactive --net
En mode interactif, il est possible d'obtenir une sortie moins dense en informations mais de style plus "arcade", où l'écran est rafraîchi chaque seconde affichant tous les aéronefs récemment vus avec quelques informations supplémentaires telles que l'altitude et le numéro de vol, extraites des paquets Mode S reçus.
Pour décoder des données à partir d'un fichier, utilisez :
./dump1090 --ifile /path/to/binfile
Le fichier binaire doit être créé en utilisant rtl_sdr comme ceci (ou avec tout autre programme capable de sortir des échantillons IQ non signés de 8 bits à un taux d'échantillonnage de 2 MHz).
rtl_sdr -f 1090000000 -s 2000000 -g 50 output.bin
Dans l'exemple rtl_sdr, un gain de 50 est utilisé, vous devriez simplement utiliser le gain le plus élevé disponible pour votre tuner. Cela n'est pas nécessaire lors de l'appel de Dump1090 lui-même car il sait sélectionner automatiquement le gain le plus élevé pris en charge.
Il est possible d'alimenter le programme avec des données via l'entrée standard en utilisant l'option --ifile avec "-" comme argument.
Dump1090 peut être appelé avec d'autres options de ligne de commande pour définir un gain différent, une fréquence, etc. Pour une liste des options, utilisez :
./dump1090 --help
Tout ce qui n'est pas documenté ici devrait être évident, et pour la plupart des utilisateurs, l'appeler sans aucun argument est la meilleure chose à faire.
Par défaut, Dump1090 vérifie les erreurs de décodage à l'aide de la somme de contrôle CRC 24 bits, lorsque disponible. Les messages avec des erreurs sont ignorés.
L'option de ligne de commande --fix active la correction des erreurs de bits uniques basée sur la somme de contrôle CRC. Techniquement, elle utilise une table de différences de sommes de contrôle précalculées résultant d'erreurs de bits uniques pour rechercher la position du bit erroné.
Ceci est effectivement capable de corriger les erreurs et fonctionne de manière fiable d'après mon expérience, cependant si vous êtes intéressé par des données très fiables, je suggère d'utiliser l'option de ligne de commande --no-fix pour désactiver la correction d'erreur.
Dans mon expérience limitée, Dump1090 a été capable de décoder un grand nombre de messages même dans des conditions où j'ai rencontré des problèmes avec d'autres programmes, mais aucun test formel n'a été effectué, donc je ne peux pas vraiment affirmer que ce programme est meilleur ou pire que d'autres programmes similaires.
Si vous pouvez capturer du trafic que Dump1090 n'arrive pas à décoder correctement, envoyez-moi un email avec un lien de téléchargement. Je pourrais essayer d'améliorer la détection pendant mon temps libre (c'est juste un projet de loisir).
En activant le support réseau avec --net, Dump1090 commence à écouter les connexions des clients sur les ports 30002 et 30001 (vous pouvez changer les deux ports si vous le souhaitez, voir la sortie de --help).
Les clients connectés sont servis avec les données dès qu'elles arrivent du périphérique (ou du fichier si --ifile est utilisé) dans le format brut similaire à ce qui suit :
*8D451E8B99019699C00B0A81F36E;
Chaque entrée est séparée par un simple saut de ligne (caractère LF, hex 0x0A).
Le port 30001 est le port d'entrée brut, et peut être utilisé pour alimenter Dump1090 avec des données dans le même format que spécifié ci-dessus, avec des messages hexadécimaux commençant par un * et se terminant par un caractère ;.
Ainsi, par exemple, s'il y a une autre instance distante de Dump1090 collectant des données, il est possible de sommer la sortie à une instance locale de Dump1090 en faisant quelque chose comme ceci :
nc remote-dump1090.example.net 30002 | nc localhost 30001
Il est important de noter que ce qui est reçu via le port 30001 est également diffusé aux clients écoutant sur le port 30002.
En général, tout ce qui est reçu du port 30001 est traité exactement comme le trafic normal des périphériques RTL ou du fichier lorsque --ifile est utilisé.
Il est possible d'utiliser Dump1090 simplement comme un hub en utilisant --ifile avec /dev/zero comme argument, comme dans l'exemple suivant :
./dump1090 --net-only
Ou alternativement pour voir ce qui se passe à l'écran :
./dump1090 --net-only --interactive
Ensuite, vous pouvez l'alimenter à partir de différentes sources de données sur internet.
Les clients connectés sont servis avec des messages au format SBS1 (BaseStation), similaires à :
MSG,4,,,738065,,,,,,,,420,179,,,0,,0,0,0,0
MSG,3,,,738065,,,,,,,35000,,,34.81609,34.07810,,,0,0,0,0
Cela peut être utilisé pour alimenter divers sites de partage sans avoir besoin d'utiliser un autre décodeur.
Les messages Mode S sont transmis sur la fréquence 1090 MHz. Si vous avez une antenne décente, vous pourrez capter des signaux d'aéronefs assez loin de votre position, surtout si vous êtes à l'extérieur et dans une position avec une bonne vue du ciel.
Vous pouvez facilement construire une antenne très bon marché en suivant les instructions sur :
http://antirez.com/news/46
Avec cette antenne triviale, j'ai pu capter des signaux d'aéronefs à plus de 200 km de moi.
Si vous êtes intéressé par une antenne plus sérieuse, consultez les ressources suivantes :
Avec --aggressive, il est possible d'activer le mode agressif qui est une version modifiée de la détection et du décodage des paquets Mode S.
Le mode agressif utilise généralement plus de CPU (surtout s'il y a beaucoup d'avions envoyant des paquets DF17), mais peut détecter quelques messages supplémentaires.
L'algorithme en mode agressif est modifié des manières suivantes :
L'utilisation du mode agressif n'est conseillée que dans les endroits où le trafic est faible afin d'avoir une chance de capturer quelques messages supplémentaires.
Le mode débogage est une aide visuelle pour améliorer l'algorithme de détection ou pour comprendre pourquoi le programme ne fonctionne pas pour une entrée donnée.
Dans ce mode, les messages sont affichés dans une représentation graphique de style art ASCII, où les barres de magnitude individuelles échantillonnées à 2 MHz sont affichées.
Un index montre le numéro d'échantillon, où 0 est l'échantillon où le premier pic Mode S a été trouvé. Un bruit de fond supplémentaire est également ajouté avant le premier pic pour fournir un contexte.
Pour activer le mode débogage et vérifier quelles combinaisons de paquets vous pouvez enregistrer, utilisez mode1090 --help pour obtenir une liste des indicateurs de débogage disponibles.
Le mode débogage inclut une sortie javascript optionnelle qui est utilisée pour visualiser les paquets à l'aide d'un navigateur web, vous pouvez utiliser le fichier debug.html dans le répertoire 'tools' pour charger le fichier frames.js généré.
Le code est très documenté et écrit pour être facile à comprendre. Pour le programmeur diligent ayant une spécification Mode S en main, il devrait être trivial de comprendre comment il fonctionne.
Les algorithmes que j'ai utilisés ont été obtenus en regardant essentiellement de nombreux messages affichés à l'aide d'un programme SDL jetable, et en essayant de modéliser l'algorithme en fonction de l'apparence graphique des messages.
Si vous avez un périphérique RTLSDR et que vous êtes dans une zone où des aéronefs survolent votre tête, exécutez simplement le programme et vérifiez les signaux.
Cependant, si vous n'avez pas de périphérique RTLSDR, ou si dans votre région la présence d'aéronefs est très limitée, vous pouvez essayer le fichier exemple distribué avec la distribution Dump1090 dans le répertoire "testfiles".
Exécutez-le simplement comme ceci :
./dump1090 --ifile testfiles/modes1.bin
C'est simplement un filtre qui prend en entrée des échantillons IQ bruts de 8 bits et produit un fichier sans toutes les parties du fichier où I et Q sont inférieurs au spécifié pendant plus de 32 échantillons.
Utilisez-le comme ceci :
cat big.bin | ./dump1090 --snip 25 > small.bin
Je l'ai utilisé pour créer un petit fichier de test à inclure dans la distribution du code source de ce programme.
Dump1090 a été écrit pendant du temps libre à Noël 2012, c'est un projet de loisir donc je ne pourrai répondre aux problèmes et l'améliorer que pendant mon temps libre, mais vous êtes encouragé à envoyer des pull requests pour améliorer le programme. Un bon point de départ peut être la liste TODO incluse dans la distribution source.
Dump1090 a été écrit par Salvatore Sanfilippo [email protected] et est publié sous la licence BSD à trois clauses.