
Uno strumento OSINT per Instagram per raccogliere tutte le posizioni geotaggate disponibili su un profilo Instagram al fine di tracciarle su una mappa e salvarle in un JSON.
TL;DR : ascineema, video del progetto
Uno strumento per estrarre posizioni geotaggate dai profili Instagram. Output in JSON e mappa interattiva.
sudo apt install chromium-chromedriver && chmod a+x /usr/bin/chromedriver
git clone https://github.com/bernsteining/instaloctrack
cd instaloctrack
pip3 install .
Oppure usa 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
ad es.
instaloctrack -t <target_account>
Se il profilo target è privato e hai un account che lo segue, puoi estrarre i dati con una sessione connessa:
instaloctrack -t <target_account> -l <your_account> -p <your_password>
oppure con Docker:
sudo docker run -v /tmp/output:/tmp/output instaloctrack -t <target_account> -o /tmp/output
Prima recuperiamo tutti i link delle foto dell'account scorrendo tutto il profilo Instagram grazie al webdriver di Selenium.
Poi recuperiamo in modo asincrono (asyncio) ogni link della foto, controlliamo se contiene una posizione nella descrizione della foto e, in caso affermativo, recuperiamo i dati della posizione e il timestamp.
Poiché Instagram non fornisce coordinate GPS e abbiamo solo nomi di luoghi, dobbiamo geocodificarli (cioè ottenere le coordinate GPS dal nome del luogo).
Per questo ho usato l'ottima API di Nominatim, che utilizza OpenStreetMap. Per il nostro uso non è richiesta alcuna chiave API e rispettiamo la Politica di utilizzo di Nominatim richiedendo coordinate GPS una volta al secondo.
Alla fine, una volta ottenute tutte le coordinate GPS, generiamo un HTML (grazie al templating di jinja2) con JavaScript incorporato che traccia una mappa OpenStreetMap (grazie alla libreria Leaflet) con tutte le nostre posizioni fissate. Anche in questo caso non è richiesta alcuna chiave API.
Inoltre, i dati raccolti dallo script (nomi delle posizioni, timestamp, coordinate GPS, errori) vengono salvati in un file JSON per essere riutilizzati.
Come esempio, ecco l'output sul profilo Instagram dell'ex presidente francese, @fhollande:

La mappa di calore:

Informazioni disponibili quando si clicca su un marcatore:

Statistiche sui dati di posizione:

Il dump dei dati JSON (solo una parte per mostrare il formato di una posizione):
{
"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"
}
}