Comment enregistrer votre adresse IP

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

DATETIMEIPHOSTNAMECITYREGIONCCGPSORGANISATIONZIP
2017-01-0100:00104.161.79.83phoenix.crstin.comPhoenixArizonaUS33.4319,-112.0150AS53755 Input Output Flood LLC85034
2017-01-0208:458.8.8.8google-public-dns-a.google.comMountain ViewCaliforniaUS37.3860,-122.0838AS15169 Google Inc.9403
2017-01-0319:3067.215.92.218No HostnameMoragaCaliforniaUS37.8381,-122.1026AS36692 OpenDNS, LLC9455
2017-01-0410:30179.60.192.36edge-star-mini-shv-01-cdg2.facebook.comMenlo ParkCaliforniaUS37.4590,-122.1781AS32934 Facebook, Inc.9402
2017-01-0514:1517.172.224.47velocityengine.comCupertinoCaliforniaUS37.3230,-122.0322AS714 Apple Inc.9501
2017-01-0611:00213.186.33.5redirect.ovh.net  FR48.8582,2.3387AS16276 OVH SA 
2017-01-0717:30151.91.35.73No HostnameTurinPiedmontIT45.0705,7.6868AS12734 Fiat Information Technology, Excellence and Methods S.p.A.1015
2017-01-0813:45194.153.110.160No HostnameParisÎle-de-FranceFR48.9167,2.3833AS49566 COMMUNE DE PARIS9330

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