Auf meiner Webseite Meine Browser-Daten lass ich neben der IP-Adresse und dem User-Agent-String weitere Browser-Daten ausgeben, die auch bei der Webprogrammierung von Nutzen sind. Da sowohl auf meinem Webserver als auch auf meinem Router eine Dualstack-Verbindung eingerichtet ist, wurde mir stets die IPv6-Adresse meines PCs angezeigt. Die IPv4-Adresse kann ich zwar auch in meinem Router einsehen (unter „WAN-IP“), aber ich dachte mir, dass es ganz nett wäre, wenn meine Browser-Daten-Seite diese gleich mit anzeigt.
Wenn beide Versionen der IP-Adressen ausgegeben werden sollen, muss als erstes die IP-Adresse des Requests einer IP-Version zugeordnet werden. In PHP gelingt eine Unterscheidung recht einfach mit der Funktion filter_var() oder filter_input() sowie den Flags FILTER_FLAG_IPV6 und FILTER_FLAG_IPV4, wie hier im Beispiel-Code:
if (filter_var($ip_adress, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
echo 'ipv6 address';
} elseif (filter_var($ip_adress, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
echo 'ipv4 address';
} else {
echo 'no valid ip address';
}
Handelt es sich hierbei um eine IPv4-Adresse, war es das schon, da der entfernte Rechner wohl über keine Dualstack-Verbindung verfügt. Handelt es sich hierbei um eine IPv6-Adresse, dann wollte ich ja noch die IPv4-Adresse ermitteln. Hierzu habe ich im DNS-Zonefile eine Subdomain nur mit A-Record, aber ohne AAAA-Record angelegt, so dass auf diese nur mit IPv4-Adressen zugegriffen wird. Ein PHP-Script auf der Subdomain gibt diese Adresse aus, so dass ein JavaScript der Browser-Daten-Seite diese per Fetch-API abrufen und in das betreffende Datenfeld der Seite einfügen kann.