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.
Achtung: Das sind FTP-URLs ! ARIN ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest RIPE ftp.ripe.net/ripe/stats/delegated-ripencc-latest ARFINIC ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest APNIX ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest LACNIC 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:
- https://www.cidr-report.org/as2.0/
- https://bgp.potaroo.net/index-bgp.html
-
Autonomous System (AS) Numbers
https://www.iana.org/assignments/as-numbers/as-numbers.xhtml -
IANA IPv4 Address Space Registry
https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xhtml
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
- IP-Adresse per ARIN abfragen
https://www.powershellgallery.com/packages/PSScriptTools/2.9.0/Content/functions%5CGet-WhoIs.ps1
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)
stat.ripe.net
Viele Administratoren wissen gar nicht, dass das RIPE selbst eine große öffentlich und anonym zugängliche Datenbank zum Internet verwaltet, die auch einfach per REST-API abgefragt werden kann.
- RIPEstat Data API
https://stat.ripe.net/docs/data_api
Das beginnt bei einem "Was ist meine IP-Adresse"
PS C:\> $myip=Invoke-RestMethod https://stat.ripe.net/data/whats-my-ip/data.json PS C:\> $myip messages : {} see_also : {} version : 0.1 data_call_name : whats-my-ip data_call_status : supported cached : False data : @{ip=2a00:6020:b007:3200:dde9:8a23:f574:1b40} query_id : 20220106135533-145da973-d95d-42bc-8a05-4075d2b30aeb process_time : 0 server_id : app123 build_version : live.2022.1.5.62 status : ok status_code : 200 time : 06.01.2022 13:55:33 PS C:\> $myip.data.ip 2a00:6020:b007:3200:8d98:397f:9ba8:86fd
Das ich aktuell per IPv6 verbunden war, hat mir das RIPE meine Adresse geliefert. Leider kenne ich keinen IPv4-Only Endpunkt, der nicht per IPv6 erreichbar ist, um auch diese Adresse bei einem "Dualstack" zu nutzen.
Mit der Adresse kann ich dann mehr über das Netzwerk erfahren:
PS C:\> $mynet= invoke-restmethod "https://stat.ripe.net/data/prefix-overview/data.json?resource=2a00:6020:b007:3200:593b:4d08:ae26:de8b" PS C:\> $mynet.data.asns | fl asn : 60294 holder : DE-DGW - Deutsche Glasfaser Wholesale GmbH
Damit habe ich den Provider und das ASN
PS C:\> $mygeo= invoke-restmethod "https://stat.ripe.net/data/geoloc/data.json?resource=2a00:6020:b007:3200:593b:4d08:ae26:de8b" PS C:\> $mygeo.data.located_resources.Locations country : DE city : Hovelhof resources : {2a00:6020:b000::/44} latitude : 51,8171 longitude : 8,6543 covered_percentage : 100
Die Abfrage ist übrigens für jede IP-Adresse möglich und nicht auf die eigene Adresse beschränkt. Nicht immer passt es aber:
$googleip= invoke-restmethod "https://stat-ui.stat.ripe.net/data/geoloc/data.json?data_overload_limit=ignore&resource=8.8.8.8" $googleip.data.located_resources.Locations country : US city : resources : {8.8.0.0/19} latitude : 37,751 longitude : -97,822 covered_percentage : 100
Die Google Multicast-Adresse ist zwar "US" zugewiesen aber keiner Stadt. Das könnte ein Hinweis sein. 1.1.1.1 ist in AU ohne City verortet und die Schweizer DNS-Server hinter 9.9.9.9 sind als "Berkeley, US" eingetragen. Interessanterweise liefert eine Abfrage für die chinesischen DNS-Server 114.114.114.114 eine Fehlermeldung.
- Providing open data and insights for
Internet resources
https://stat.ripe.net/about/ - Ripestats App
https://stat.ripe.net/app/launchpad
Nutzen Sie einfach mal https://stat.ripe.net/app/launchpad, um etwas über ihre Adresse oder andere Adressen in Erfahrung zu bringen.
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. Content-Provider müssen ja schon für ihre Rechteinhaber möglichst genau erkennen, wo sich der Client befindet, damit z.B. Streaming-Angebote auch nur in den vom Lizenzgeber erlaubten gebieten genutzt werden. 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.
- Azure MAPS Geo
https://azure.microsoft.com/de-de/services/azure-maps/
https://docs.microsoft.com/de-de/azure/azure-maps/azure-maps-event-grid-integration - ip.info.io
https://ipinfo.io/products/free-ip-database
Kostenlose CSV/JSON/MMDB Datei mit IP-Netzwerk, Land und ASN. - BigDataCloud
https://www.bigdatacloud.com/sdk - GeoIP® by MaxMind
https://dev.maxmind.com/geoip/ - IP2Location
http://www.ip2location.com/
https://lite.ip2location.com/database/ip-country - Ipregistry
https://ipregistry.co/
https://ipregistry.co/docs/endpoints - ipdata
https://www.ipdata.co/ - ipgeolocation
https://ipgeolocation.io/
IPAdressen matchen
Einige Datenbanken haben direkt den Datentyp "IP-Address" oder enthaten Umrechnungsfunktionen und erlauben damit eine flotte Speicherung und hoffentlich auch Suche:
- Postgres: 8.9. Network Address Types
https://www.postgresql.org/docs/current/datatype-net-types.html - INET_ATON() function in MySQL
https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_inet-aton
https://www.geeksforgeeks.org/inet_aton-function-in-mysql/
Für anderen Datenbanken müssen Se nun natürlich überlegen, wie sie solche Listen von Subnetzen oder IP-Adressen auf ASNs, Länder o.ä. effektiv speichern. Sicher könnten Sie das Netzwerk einfach in der üblichen Notation mit "Netzwerk/Subnetz" schreiben und dann von hinten die Bits durchlaufen und nach Übereinstellungen suchen. Ein anderer Ansatz wäre Start und End-Adresse als separate Spalten zu schreiben. Hier mal ein Beispiel:
Datenbanken sind aber immer ganz gut, wenn es um das Vergleichen von Zahlen geht und genau genommen können Sie IPv4-Adressen auch als Zahl schreiben. Die Adresse von https://www.msxfaq.de löste am 21. Jan 2024 auf die IP-Adresse "178.77.117.98" auf, die aber auch entsprechend der Wertigkeit der Stellen auch als Integer geschrieben werden kann
178.77.117.98 = (((178*256)+77)*256+117)*256+98 = 178.77.117.98
Viele Administratoren sind dann auch überrascht zu sehen, dass Windows auch solche Zahlen erlaubt:
Auch ein Zugriff über "http://178.77.117.98/" würde funktionieren, wenn der Webserver hinter der Adresse nicht noch den Hostheader überprüfen würde. Das funktioniert übrigens auch mit IPv4-Adressen auch wenn hier die maximal 64bit als Netzwerk anzunehmen sind.
- Comparing IP Addresses in SQL
https://www.sisense.com/blog/comparing-ip-addresses-in-sql/
Einige Datenbanken haben direkte Datentypen für IP-Adressen.
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
- FTTH mit IPv6 (DG)
- Glasfaser in Hövelhof
-
RDAP - der Nachfolger von Whois
Nachfolger von WHOIS noch ohne Mehrwert - https://www.bigdatacloud.com/ip-geolocation/what-is-my-ip
-
Geolocation in the RIPE Database
https://www.ripe.net/manage-ips-and-asns/db/tools/geolocation-in-the-ripe-database - Autonomous System (AS) Numbers
https://www.iana.org/assignments/as-numbers/as-numbers.xhtml#RIPE_NCC - Comparing IP Addresses in SQL
https://www.sisense.com/blog/comparing-ip-addresses-in-sql/
Einige Datenbanken haben direkte Datentypen für IP-Adressen.