Se positionner sur une carte en ligne de commande (et sans GPS)

Pour un sujet plus large, j’ai fait des recherches récemment sur la localisation en général, et plus spécialement la localisation sans GPS. Vous le savez sûrement, quand un appareil iOS cherche sa position (c’est un peu différent sous Mac OS X), il utilise différentes sources : le GPS, le Wi-Fi mais aussi son modem GSM. On voit souvent dans les films (et dans la réalité) qu’il est possible de localiser un téléphone portable, et bien il est parfaitement possible de le faire… chez vous.
maps

L’idée de base consiste simplement à récupérer les données réseaux d’un téléphone (ou dans mon cas d’un modem 3G connecté à mon Mac). Avec quelques commandes (des applications existent pour Android et autres), vous pouvez obtenir quatre valeurs : le MCC, le MNC, le LAC et le CellID. La première valeur représente le pays (Mobile Country Code), la seconde (Mobile Network Code) indique le réseau, la troisième est une zone (Location Area Code) et la dernière l’identifiant de l’antenne. En croisant les informations avec une base de données, on peut déterminer l’antenne utilisée et donc positionner vaguement l’appareil sur une carte.

Bien évidemment, c’est assez imprécis. Dans une zone urbaine, quand plusieurs cellules se chevauchent, il est possible de trianguler la position en effectuant plusieurs mesures, mais dans les zones rurales, les appareils ne captent généralement qu’une cellule. De même, les antennes portent souvent plus loin dans les campagnes, avec une limite théorique maximale de plusieurs dizaines de kilomètres dans le pire des cas, mais heureusement souvent moins. L’intérêt de cette solution, c’est qu’elle est rapide et permet ensuite d’affiner la position avec des technologies plus précises mais plus lentes à mettre en place.

Maintenant, comment tester ? Sous iOS, le Field Test permet d’obtenir les données, sous Android (et d’autres), des applications peuvent le faire. Mais avec un Raspberry Pi ou un Mac, le mieux est de passer par les commandes AT. Ces antiques commandes, issues des premiers modems, permettent de prendre la main sur un modem. J’utilise ZTerm sur Mac pour me connecter à mon modem, une carte XU870 reconnue nativement par Mac OS X. Ca fonctionne avec n’importe quel GSM accessible en série, le cas d’une bonne partie des anciens appareils (j’ai testé avec un antique T68i de chez Sony Ericsson sans soucis).

Mon modem 3G

Mon modem 3G

Une fois connecté au modem (qui s’appelle wwan dans mon cas), il faut taper une commande pour vérifier que ça fonctionne.

AT

Normalement, un OK devrait apparaître.

Ensuite, il faut configurer le tout, avec les deux commandes suivantes.

AT+COPS=0,2
AT+CREG=2

Enfin, il faut inscrire les deux commandes suivantes et noter les réponses. La première donne le MCC et le MNC, la seconde le LAC et le CellID.

AT+COPS?
AT+CREG?

Voici les exemples de réponses à mon domicile : +COPS: 0,2,"20810",2 et +CREG: 2,1,BB8A,691D.

Maintenant, que faire des données ? Aller sur Internet et utiliser un des (très nombreux) sites qui permettent de faire le lien entre les données et la position. Ils utilisent généralement les données de Google pour le positionnement des antennes, même si d’autres bases existent. Pour essayer, j’ai utilisé CellTrack, qui fonctionne correctement. Il suffit de rentrer les données (ici en hexa) pour obtenir une localisation. Pour les amateurs, il est possible de faire un peu de triangulation en utilisant les données de plusieurs cellules (quand c’est possible) et le site permet aussi (pour les paranoïaques) d’obtenir les coordonnées exactes de l’antenne.

Sur une carte

Sur une carte