Avez-vous déjà pensé : « Mhmmm… était-ce moi derrière cette adresse IP à ce moment particulier ? Je souhaite que je le sais parce que QUI M’AIDERAIT BEAUCOUP POUR DÉTERMINER SI J’AI UN PROBLÈME ICI OU PAS ! »
Script bash
#!/bin/bash
ipcur=$(curl -s ipecho.net/plain)
if ! tail -n 1 ~/.cronjobs/iplog.csv | grep -q "$ipcur"; then
{
printf '%s;' "$(date "+%Y-%m-%d;%H:%M")";
curl -s ipinfo.io/json | jq -r '.ip + ";"
+ .hostname + ";"
+ .city + ";"
+ .region + ";"
+ .country + ";"
+ .loc + ";"
+ .org + ";"
+ .postal + ";"';
} >> ~/.cronjobs/iplog.csv
fi
Ce script bash vérifie l’adresse IP externe actuelle. Si le résultat diffère de la précédente, dernière adresse IP utilisée, il ajoute une nouvelle ligne avec les valeurs spécifiées dans le fichier journal csv. Ces valeurs sont :
Date
Time
IP
Hostname
City
Region
Country
Location
Organisation
Postal Code
Vous pouvez vous demander pourquoi il y a deux services, ipinfo.io et ipecho.net ?
Dans certaines circonstances, par exemple lorsque vous êtes sur une connexion mobile, j’ai trouvé ipecho un peu plus rapide et l’interrogation est d’une seule valeur (l’adresse IP) par rapport au bloc de json d’ipinfo qui contient plusieurs valeurs. Mais j’avoue que je ne suis pas sûr même si ça compte.
❯ time curl ipecho.net/plain;echo
0.00s user 0.00s system 0% cpu 2.317s total
❯ time curl -s ipinfo.io/104.161.79.83
{
"ip": "104.161.79.83",
"hostname": "No Hostname",
"city": "Phoenix",
"region": "Arizona",
"country": "US",
"loc": "33.4319,-112.0150",
"org": "AS53755 Input Output Flood LLC",
"postal": "85034"
}
0.00s user 0.01s system 0% cpu 2.572s total
Jaloux de mon temps d'attente? Probablement pas.
Le fichier journal
DATE | TIME | IP | HOSTNAME | CITY | REGION | CC | GPS | ORGANISATION | ZIP |
---|---|---|---|---|---|---|---|---|---|
2017-01-01 | 00:00 | 104.161.79.83 | phoenix.crstin.com | Phoenix | Arizona | US | 33.4319,-112.0150 | AS53755 Input Output Flood LLC | 85034 |
2017-01-02 | 08:45 | 8.8.8.8 | google-public-dns-a.google.com | Mountain View | California | US | 37.3860,-122.0838 | AS15169 Google Inc. | 9403 |
2017-01-03 | 19:30 | 67.215.92.218 | No Hostname | Moraga | California | US | 37.8381,-122.1026 | AS36692 OpenDNS, LLC | 9455 |
2017-01-04 | 10:30 | 179.60.192.36 | edge-star-mini-shv-01-cdg2.facebook.com | Menlo Park | California | US | 37.4590,-122.1781 | AS32934 Facebook, Inc. | 9402 |
2017-01-05 | 14:15 | 17.172.224.47 | velocityengine.com | Cupertino | California | US | 37.3230,-122.0322 | AS714 Apple Inc. | 9501 |
2017-01-06 | 11:00 | 213.186.33.5 | redirect.ovh.net | FR | 48.8582,2.3387 | AS16276 OVH SA | |||
2017-01-07 | 17:30 | 151.91.35.73 | No Hostname | Turin | Piedmont | IT | 45.0705,7.6868 | AS12734 Fiat Information Technology, Excellence and Methods S.p.A. | 1015 |
2017-01-08 | 13:45 | 194.153.110.160 | No Hostname | Paris | Île-de-France | FR | 48.9167,2.3833 | AS49566 COMMUNE DE PARIS | 9330 |
Le tableau au-dessus est une illustration de que le fichier journal pourrait ressembler.
En-têtes de CSV
Pour activer les en-têtes de csv, mettre ce code sur la première ligne d'iplog.csv
DATE;TIME;IP;HOSTNAME;CITY;REGION;COUNTRY;LOCATION;ORG;POSTAL;
Automatiser le script
Ouvrez crontab sur la ligne de commande, puis ajoutez la tâche cron dans l’éditeur.
❯ crontab -e
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command to execute
*/15 * * * * source ~/.cronjobs/iplog.sh
Dans ce cas iplog.sh
sera exécuté toutes les 15 minutes.
Configuration du système et outils utilisés
- macOS 10.12 Sierra
- bash
- crontab
- ipinfo.io et ipecho.net