IP Location Service

Für einige Auswertungen wäre es sehr gut zu wissen, wo sich eine IP-Adresse befindet. Das kann ein geografischer Ort oder auch eine Zuordnung zu einer Firma oder einem Provider sein. Es gibt im Internet viele Dienste, die genau solche Informationen teils kostenfrei, teils gegen Gebühr liefern. Mich hat interessiert, wie ich solche Daten selbst ermitteln kann.

Die richtige Adresse

Zuerst stellt sich die Frage, wie der Prozess die richtige IP-Adresse ermittelt. Ein Programm auf einem Client kann  natürlich die eigenen "lokalen" Adressen ermitteln aber das hilft nicht viel weiter, da fast alle Systeme hier mit privaten IPv4-Adressen arbeiten. Erst mit IPv6 sieht das etwas anderes aus.

Im Heimnetzwerk könnte der Client z.B. per UPNP versuchen seine öffentlichen IP zu ermitteln. Auch ein Traceroute kann ihm dabei helfen, die erste "externe" Adresse zu ermitteln und damit z.B. auf den Provider zu schließen. Aber auch das ist nicht immer ausreichend, da es auch "Carrier Grade NAT" gibt. Der eigene Router bekommt dann eine Adresse aus dem Bereich 100.64.x.x-100.127.x.x (Siehe FTTH mit IPv6 (DG), die sich dann hinter einem großen NAT-System mit der richtigen öffentlichen Adresse verbergen. Entsprechend "ungenau" sind dann die Angaben.


Quelle https://www.bigdatacloud.com/ip-geolocation/what-is-my-ip

Es ist aber besser als nicht und wenn ich schon den Ort so nicht genau in Erfahrung bringen kann, dann erhalten ich zumindest Informationen über den Provider und das Netz-Routing. Wenn ein Anbieter zu einer Adresse aber so eine geografische Region angibt, dann dürfte es an aufgewerteten Daten liegen. So können Browser mit dem passenden Betriebssystem, primär Mobilgeräte, einen GPS-Standort melden.

WHOIS und NICs, IP zu ASN, ASN zu Provider und mehr

Alle Router im Internet müssen natürlich wissen, wie Sie ein Paket anhand der Ziel-Adresse weitergeben, bis es eben am Ziel ist. Dazu gibt es fünf Stellen auf der Welt (ARIN, AFRINIC, APIC, LACNIC, RIPE.NCC), die alle öffentlichen IP-Adressen vergeben und darüber buch führen. Dort können wir erfahren, zu welchem Provider, genauer welchem "autonomen Netzwerk" (ASN), eine IP-Adresse gehört. Zu jedem ASN ist dann natürlich auch ein Besitzer eingetragen. So lässt sich dann in vielen Fällen schon der Provider ermitteln und mit etwas Glück auch die geografische Region. Das funktioniert natürlich weniger gut für Netzwerke, die weltweit genutzt werden.

Leider weiß man natürlich nicht im Voraus, welches dieser fünf NICs für eine Adresse zuständig ist. Alle NICs veröffentlichen aber die Zuordnungslisten der IP-Netzwerke zum ASN. das ist aber keine geografische Zuordnung, sondern nur zum Netzwerk.

ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
ftp.ripe.net/ripe/stats/delegated-ripencc-latest
ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest

Kein Router wertet aber diese Dateien aus. Die Router untereinander nutzen Routingprotokolle (Im Internet wird das "Border Gateway Protokol" (BGP) genutzt. Die Router leiten sich über eine eingerichtete Partnerschaft ihre Leitwege mit und lernen so, welche Adressen auf der jeweils anderen Seite bekannt sind. Diese Tabellen können Sie natürlich auch abfragen. Allerdings müssen Sie dazu schon einen Zugang zu einem BGP-Router haben oder eine Webseite nutzen, die ihnen Abfragen erlaubt:

zudem gibt es natürlich einige Webdienste, die Sie mit einer IP-Adresse direkt befragen können, z.B.

# Abfrage meiner PublicIP
Invoke-RestMethod "https://accountws.arin.net/public/seam/resource/rest/myip"

version ip
------- --
6 2003:c2:e702:3183:8c3d:4cd0:835a:534f
# Ermitteln des Providers für eine IP-Adresse über das RIPE
(invoke-RestMethod 'https://rest.db.ripe.net/search.json?query-string=2003:c2:e702:3183:8c3d:4cd0:835a:534f').objects.object[0].attributes.attribute

name          value
----          -----
inet6num      2003::/19
netname       DE-TELEKOM-20050113
country       DE
org           ORG-DTA2-RIPE
admin-c       DTAG-RIPE
tech-c        DTAG-RIPE
status        ALLOCATED-BY-RIR
mnt-by        RIPE-NCC-HM-MNT
mnt-by        DTAG-NIC
mnt-lower     DTAG-NIC
mnt-routes    DTAG-NIC
mnt-routes    DTAG-RR
mnt-domains   DTAG-NIC
mnt-domains   DTAG-RR
created       18.07.2007 11:48:53
last-modified 02.12.2019 11:42:04
source        RIPE

 
(Invoke-RestMethod https://rest.db.ripe.net/search.json?query-string=2a00:6020:13fa:d300:e569:f4df:70eb:442e).objects.object[0].attributes.attribute
name value
---- -----
inet6num 2a00:6020::/32
netname DE-DGNO-20130322
country DE
org ORG-DGNO1-RIPE
admin-c DGNO-RIPE
tech-c DGNO-RIPE
status ALLOCATED-BY-RIR
mnt-by RIPE-NCC-HM-MNT
mnt-by MNT-DGNO
created 22.03.2013 14:23:17
last-modified 28.06.2016 14:35:50
source RIPE

Diese Abfragen liefern aber nur Netzwerkinformationen aber sind nicht hinreichend für eine geografische Einordnung. Das schreibt das ein oder andere NIC auch explizit auf der Webseite

"The RIPE NCC is not a geolocation provider. Following a unanimous decision by the RIPE NCC Executive Board not to support resource expenditure in the area of geolocation services, the RIPE NCC has no plans to become a provider. "
Quelle: Geolocation in the RIPE Database (https://www.ripe.net/manage-ips-and-asns/db/tools/geolocation-in-the-ripe-database)

GeoIP-Services

Ehe Sie nun aber versuchen, die Dateien der RIPE-Instanzen auszulesen und sich einen eigenen Service zu schreiben, sollten Sie besser prüfen, welche Dienste schon im Internet verfügbar sind. Meist sind die Kosten überschaubar, denn solche Datensammlungen lassen automatisch ohne viel Personalaufwand erstellen und daher günstig. Die Liste hier ist nicht repräsentativ

GPS und WLAN Ortung

Wenn Sie nicht nur die IP-Adresse eines Clients haben sondern auf dem Gerät des Anwenders selbst Code starten können, dann kann ihre Software natürlich auch die Location-APIs des Betriebssystems nutzen.  Android und IOS sind sehr gut darin, die Position des Geräte und damit auch des Besitzers auf der Erde zu ermitteln. Dazu wird GPS aber vor allem auch WLAN genutzt. Google und Apple haben vermutlich die beste "WLAN-Landkarte" mit Informationen über SSIDs, AccessPoints und deren Feldstärken.

Diese Information kann das Smartphone natürlich nicht ohne Hilfe eines Servers auswerten, weswegen die Daten natürlich erst mal nach Hause gemeldet werden, damit letztlich dann die Position ausgeliefert wird. Dieses Wissen können Sie natürlich nutzen, um den Besucher ihrer Webseite oder Nutzer ihrer App zu verorten. Über die öffentliche IP-Adressen, die Sie auch ermitteln können, können Sie dann auch die Position im "Netzwerk" ermitteln, z.B. welcher Provider genutzt wird.

Weitere Links