
Dump1090 è un semplice decodificatore Mode S per dispositivi RTLSDR
Dump 1090 è un decoder Mode S progettato specificamente per dispositivi RTLSDR.
Le caratteristiche principali sono:
Anche se di tanto in tanto aggiungo/sistemo cose nel mio fork, punto al minimalismo dell'implementazione. Tuttavia esiste un fork molto più ricco di funzionalità disponibile, sviluppato da MalcolmRobb.
Digitate "make".
Per catturare il traffico direttamente dal tuo dispositivo RTL e mostrare il traffico catturato sullo standard output, basta eseguire il programma senza alcuna opzione:
./dump1090
Per emettere solo messaggi esadecimali:
./dump1090 --raw
Per eseguire il programma in modalità interattiva:
./dump1090 --interactive
Per eseguire il programma in modalità interattiva, con supporto di rete, e collegarti con il tuo browser a http://localhost:8080 per vedere il traffico in tempo reale:
./dump1090 --interactive --net
In modalità interattiva è possibile avere un output meno denso di informazioni ma più "stile arcade", dove lo schermo viene aggiornato ogni secondo mostrando tutti gli aeromobili visti di recente con alcune informazioni aggiuntive come altitudine e numero di volo, estratte dai pacchetti Mode S ricevuti.
Per decodificare dati da file, usa:
./dump1090 --ifile /path/to/binfile
Il file binario dovrebbe essere creato usando rtl_sdr in questo modo (o con qualsiasi altro
programma in grado di produrre campioni IQ senza segno a 8 bit a una frequenza di campionamento di 2 MHz).
rtl_sdr -f 1090000000 -s 2000000 -g 50 output.bin
Nell'esempio rtl_sdr viene usato un guadagno di 50; in pratica dovresti usare il guadagno
più alto disponibile per il tuo tuner. Questo non è necessario quando si chiama Dump1090 stesso
poiché è in grado di selezionare automaticamente il guadagno massimo supportato.
È possibile alimentare il programma con dati tramite standard input usando l'opzione --ifile con "-" come argomento.
Dump1090 può essere chiamato con altre opzioni da riga di comando per impostare un guadagno, una frequenza diversi e così via. Per un elenco delle opzioni usa:
./dump1090 --help
Tutto ciò che non è documentato qui dovrebbe essere ovvio, e per la maggior parte degli utenti chiamarlo senza alcun argomento è la cosa migliore da fare.
Di default Dump1090 cerca di correggere gli errori di bit usando il checksum CRC. Il programma usa una tabella di sindromi precalcolata per identificare e correggere rapidamente fino a due errori di bit nei messaggi ricevuti.
Questo è effettivamente in grado di correggere gli errori e funziona in modo affidabile nella mia esperienza, tuttavia se sei interessato a dati molto affidabili ti suggerisco di usare l'opzione da riga di comando --no-fix per disabilitare la correzione degli errori.
Nella mia limitata esperienza Dump1090 è stato in grado di decodificare un gran numero di messaggi anche in condizioni in cui ho incontrato problemi usando altri programmi; tuttavia non è stato eseguito alcun test formale, quindi non posso davvero affermare che questo programma sia migliore o peggiore rispetto ad altri programmi simili.
Se riesci a catturare traffico che Dump1090 non è in grado di decodificare correttamente, mandami un'email con un link per il download. Potrei provare a migliorare il rilevamento durante il mio tempo libero (questo è solo un progetto hobbistico).
Dump1090 può decodificare i messaggi di posizione al suolo (Type Code 5-8), che vengono trasmessi dagli aeromobili mentre sono a terra (rullaggio, attesa ai gate, ecc.). Questi messaggi includono la posizione dell'aeromobile, la velocità al suolo e la rotta al suolo.
Le posizioni al suolo usano una codifica diversa rispetto alle posizioni in volo: il formato CPR (Compact Position Reporting) copre solo 90 gradi invece di 360, e richiede una posizione di riferimento entro 45 miglia nautiche per una decodifica senza ambiguità.
Invece di richiedere di configurare la posizione del tuo ricevitore, Dump1090 calcola automaticamente una posizione di riferimento facendo la media di tutte le posizioni in volo decodificate con successo. Questo funziona perché se riesci a ricevere traffico al suolo da un aeroporto, quasi certamente ricevi anche traffico in volo. La posizione media degli aeromobili in sorvolo fornisce un riferimento che è abbastanza vicino (ben all'interno del requisito delle 45 NM) per decodificare le posizioni al suolo.
Nota: le posizioni al suolo verranno visualizzate solo dopo che almeno una posizione in volo è stata decodificata con successo per stabilire il riferimento. Gli aeromobili a terra mostreranno altitudine 0 nel display interattivo.
Abilitando il supporto di rete con --net, Dump1090 inizia ad ascoltare le connessioni dei client sulle porte 30002 e 30001 (puoi cambiare entrambe le porte se vuoi, vedi l'output di --help).
I client connessi ricevono i dati appena arrivano dal dispositivo (o dal file se si usa --ifile) nel formato raw simile al seguente:
*8D451E8B99019699C00B0A81F36E;
Ogni voce è separata da un semplice newline (carattere LF, hex 0x0A).
La porta 30001 è la porta di ingresso raw e può essere usata per alimentare Dump1090 con
dati nello stesso formato specificato sopra, con messaggi esadecimali che iniziano con
un * e terminano con un carattere ;.
Quindi, per esempio, se c'è un'altra istanza remota di Dump1090 che raccoglie dati, è possibile sommare l'output a un'istanza locale di Dump1090 facendo qualcosa del genere:
nc remote-dump1090.example.net 30002 | nc localhost 30001
È importante notare che ciò che viene ricevuto tramite la porta 30001 viene anche trasmesso ai client in ascolto sulla porta 30002.
In generale, tutto ciò che viene ricevuto dalla porta 30001 viene gestito esattamente come il traffico normale dei dispositivi RTL o dal file quando si usa --ifile.
È possibile usare Dump1090 semplicemente come hub usando --ifile con /dev/zero come argomento, come nell'esempio seguente:
./dump1090 --net-only
Oppure, in alternativa, per vedere cosa succede sullo schermo:
./dump1090 --net-only --interactive
Poi puoi alimentarlo da diverse fonti di dati da internet.
I client connessi ricevono messaggi in formato SBS1 (BaseStation), simili a:
MSG,4,,,738065,,,,,,,,420,179,,,0,,0,0,0,0
MSG,3,,,738065,,,,,,,35000,,,34.81609,34.07810,,,0,0,0,0
Questo può essere usato per inviare dati a vari siti di condivisione senza la necessità di usare un altro decoder.
I messaggi Mode S vengono trasmessi sulla frequenza 1090 MHz. Se hai un'antenna decente sarai in grado di captare segnali da aeromobili abbastanza lontani dalla tua posizione, soprattutto se sei all'aperto e in una posizione con una buona visuale del cielo.
Puoi facilmente costruire un'antenna molto economica seguendo le istruzioni su:
http://antirez.com/news/46
Con questa antenna banale sono riuscito a captare segnali di aeromobili a più di 200 km da me.
Se sei interessato a un'antenna più seria, controlla le seguenti risorse:
Con --aggressive è possibile attivare la modalità aggressiva, una versione modificata del rilevamento e della decodifica dei pacchetti Mode S. La modalità aggressiva usa di solito più CPU (specialmente se ci sono molti aerei che inviano pacchetti DF17), ma può rilevare qualche messaggio in più.
L'algoritmo in modalità aggressiva è modificato nei seguenti modi:
L'uso della modalità aggressiva è consigliato solo in luoghi con poco traffico per avere la possibilità di catturare qualche messaggio in più.
La modalità Debug è un aiuto visivo per migliorare l'algoritmo di rilevamento o per capire perché il programma non funziona con un dato input.
In questa modalità i messaggi vengono visualizzati in una rappresentazione grafica in stile ASCII art, in cui vengono mostrate le singole barre di magnitudo campionate a 2 MHz.
Un indice mostra il numero del campione, dove 0 è il campione in cui è stato trovato il primo picco Mode S. Prima del primo picco viene aggiunto anche del rumore di fondo aggiuntivo per fornire un po' di contesto.
Per abilitare la modalità debug e verificare quali combinazioni di pacchetti puoi
registrare, usa dump1090 --help per ottenere un elenco dei flag di debug disponibili.
La modalità debug include un output javascript opzionale utilizzato per visualizzare i pacchetti tramite un browser web; puoi usare il file debug.html nella directory 'tools' per caricare il file frames.js generato.
Il codice è molto documentato e scritto per essere facile da capire. Per il programmatore diligente con una specifica Mode S tra le mani, dovrebbe essere banale capire come funziona.
Gli algoritmi che ho usato sono stati ottenuti fondamentalmente osservando molti messaggi visualizzati con un programma SDL usa-e-getta e cercando di modellare l'algoritmo in base all'aspetto grafico dei messaggi.
Se hai un dispositivo RTLSDR e ti trovi in una zona dove ci sono aeromobili che volano sopra la tua testa, esegui il programma e verifica i segnali.
Tuttavia, se non hai un dispositivo RTLSDR, o se nella tua zona la presenza di aeromobili è molto limitata, potresti voler provare il file di esempio distribuito con la distribuzione Dump1090 nella directory "testfiles".
Basta eseguirlo così:
./dump1090 --ifile testfiles/modes1.bin
È solo un semplice filtro che prende in input campioni IQ grezzi a 8 bit e produce in output un file a cui mancano tutte le parti del file in cui I e Q sono inferiori al specificato per più di 32 campioni.
Usalo così:
cat big.bin | ./dump1090 --snip 25 > small.bin
L'ho usato per creare un piccolo file di test da includere nella distribuzione del codice sorgente di questo programma.
Dump1090 è stato scritto in alcuni momenti liberi durante il Natale 2012; è un progetto hobbistico, quindi potrò occuparmi dei problemi e migliorarlo solo nel tempo libero. Tuttavia, sei incoraggiato a inviare pull request per migliorare il programma. Un buon punto di partenza può essere la lista TODO inclusa nella distribuzione del sorgente.
Dump1090 è stato scritto da Salvatore Sanfilippo [email protected] e dagli altri contributori che hanno inviato patch nel corso del tempo (controlla la cronologia dei commit per maggiori informazioni) ed è rilasciato sotto la licenza BSD a tre clausole.