
Un outil OSINT pour Instagram qui collecte toutes les localisations géolocalisées disponibles sur un profil Instagram afin de les tracer sur une carte et de les exporter dans un fichier JSON.
TL;DR : ascineema, vidéo du projet
Un outil pour récupérer les positions géotaguées sur les profils Instagram. Sortie en JSON et carte interactive.
sudo apt install chromium-chromedriver && chmod a+x /usr/bin/chromedriver
git clone https://github.com/bernsteining/instaloctrack
cd instaloctrack
pip3 install .
Ou utilisez Docker :
sudo docker build -t instaloctrack -f Dockerfile .
instaloctrack -h
usage: instaloctrack [-h] [-t TARGET_ACCOUNT] [-l LOGIN] [-p PASSWORD] [-v]
Instagram location data gathering tool. Usage: python3 instaloctrack.py -t <target_account>
optional arguments:
-h, --help show this help message and exit
-t TARGET_ACCOUNT, --target TARGET_ACCOUNT
Instagram profile to investigate
-l LOGIN, --login LOGIN
Instagram profile to connect to, in order to access
the instagram posts of the target account
-p PASSWORD, --password PASSWORD
Password of the Instagram profile to connect to
-v, --visual Spawns Chromium GUI, otherwise Chromium is headless
ex.
instaloctrack -t <target_account>
Si le profil cible est privé et vous avez un compte qui suit le profil cible, vous pouvez récupérer les données avec une session connectée :
instaloctrack -t <target_account> -l <your_account> -p <your_password>
ou avec Docker :
sudo docker run -v /tmp/output:/tmp/output instaloctrack -t <target_account> -o /tmp/output
D'abord, nous récupérons tous les liens des photos du compte en faisant défiler tout le profil Instagram, grâce au webdriver de Selenium.
Ensuite, nous récupérons de manière asynchrone (asyncio) chaque lien de photo, nous vérifions s'il contient un emplacement dans la description de la photo, et récupérons les données de l'emplacement s'il y en a, ainsi que l'horodatage.
Comme Instagram ne fournit pas de coordonnées GPS, et que nous n'avons que des noms de lieux, nous devons géocoder ces derniers (c'est-à-dire obtenir les coordonnées GPS à partir du nom du lieu).
Pour cela, j'ai utilisé l'excellente API de Nominatim, qui utilise OpenStreetMap. Pour notre utilisation, aucune clé API n'est requise, et nous respectons la politique d'utilisation de Nominatim en demandant les coordonnées GPS une fois par seconde.
Finalement, une fois que nous avons toutes les coordonnées GPS, nous générons un HTML (grâce au templating Jinja2) avec du Javascript embarqué qui affiche une carte Open Street Map (grâce à la bibliothèque Leaflet) avec tous nos emplacements épinglés. Encore une fois, aucune clé API n'est requise pour cette étape.
De plus, les données collectées par le script (noms des lieux, horodatages, coordonnées GPS, erreurs) sont déversées dans un fichier JSON afin de pouvoir être réutilisées.
À titre d'exemple, voici le résultat sur le profil Instagram de l'ancien président français, @fhollande :

La carte de chaleur :

Informations disponibles en cliquant sur un repère :

Statistiques sur les données de localisation :

Le fichier JSON des données (juste une partie pour montrer le format d'un emplacement donné) :
{
"link": "https://www.instagram.com/p/-Q_9EvR9eu",
"place": {
"id": "290297",
"name": "Musée du quai Branly - Jacques Chirac",
"slug": "musee-du-quai-branly-jacques-chirac",
"street_address": " 37 quai Branly",
" zip_code": " 75007",
" city_name": " Paris",
" region_name": " ",
" country_code": " FR"
},
"timestamp": "2015-11-19",
"gps": {
"lat": "48.8566969",
"lon": "2.3514616"
}
}