Wie Sie Ihre IP-Adresse dokumentieren

Haben Sie sich schon jemals gedacht: "Mhhmmm… war das ich hinter dieser IP-Adresse zu diesem ganz bestimmten Zeitpunkt? Ich wünschte nur, dass ich es wüsste, weil weil es mir bei DIESEM BESTIMMTEN PROBLEM SEHR HELFEN WÜRDE!"

Bash-Skript

#!/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

Dieses Bash-Skript überprüft die aktuelle externe IP-Adresse. Wenn sich das Ergebnis von der früheren, zuletzt verwendeten IP-Adresse unterscheidet, fügt es eine neue Zeile mit den angegebenen Werten in die CSV Log-Datei hinzu. Diese Werte sind:

Date
Time
IP
Hostname
City
Region
Country
Location
Organisation
Postal Code

Sie Fragen sich vielleicht, warum es zwei Dienste gibt, ipinfo.io und ipecho.net?
Unter bestimmten Umständen, z.B. wenn Sie eine mobile Verbindung nutzen, hatte ich den Eindruck, dass Ipecho schneller sei, und es frägt nur einen einzelnen Wert ab (die IP-Adresse) im Vergleich zum json-Block aus Ipinfo der mehrere Werte enthält. Obwohl ich mir zugebenermassen nicht sicher bin, ob das überhaupt eine Rolle spielt.

❯ 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

Na, neidisch auf meine Latenz? Wohl eher nicht.

Die Log-Datei

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

Die obige Tabelle ist ein Beispiel wie die Log-Datei aussehen könnte.

CSV Kopfzeilen

Um CSV-Header zu aktivieren, setzen Sie diesen Code in der ersten Zeile von iplog.csv ein.

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

Das Skript automatisieren

Öffnen Sie Crontab auf der Kommandozeile und fügen Sie den Cronjob im Editor hinzu.

❯ 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 diesem Fall wird iplog.sh alle 15 Minuten ausgeführt.

System-Setup verwendete Werkzeuge