Come registrare il tuo indirizzo IP

Hai mai pensato: "Mhmmm… ero io dietro quell'indirizzo IP in questo particolare momento? Vorrei saperlo perché MI AIUTEREBBE MOLTO PER DETERMINARE SE HO UN PROBLEMA QUI O NON!"

Script di 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

Questo script bash controlla l'attuale indirizzo IP esterno. Se il risultato è diverso dal precedente, ultimo indirizzo IP utilizzato, lo script aggiunge una nuova riga con i valori specificati al file di registro csv.

Date
Time
IP
Hostname
City
Region
Country
Location
Organisation
Postal Code

Potreste chiedervi perché ci sono due servizi, ipinfo.io e ipecho.net?
In determinate circostanze, per esempio, quando sei su una connessione mobile, ho trovato ipecho più veloce e interroga solo un singolo valore (l'indirizzo IP) rispetto al blocco di json d'ipinfo che contiene valori multipli. Ma ammetto che non so se adesso avesse importanza.

❯ 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

Geloso della mia latenza? Probabilmente no.

Il file di registro

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

La tabella di sopra è un'illustrazione di come potrebbe apparire il file di registro.

Intestazioni CSV

Per attivare le intestazioni csv, inserire questo codice nella prima riga di iplog.csv.

DATE;TIME;IP;HOSTNAME;CITY;REGION;COUNTRY;LOCATION;ORG;POSTAL;

Automatizzare lo script

Aprire crontab sulla riga di comando e aggiungere il cronjob nell'editor.

❯ 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

In questo caso iplog.sh verrà eseguito ogni 15 minuti.

Configurazione e strumenti utilizzati