Zum Hauptmenü

Unterscheidung von IPv6- und IPv4-Adressen in PHP

Jörg Kruse

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.

Tags: PHP

Kommentare

Kurz und bündig.

Bei meiner Schnellrecherche im Netz habe ich schon viel Unzutreffendes gelesen. Diese Lösung unter Verwendung einer Filterfunktion macht es einfach und zielführend.
Bei Gefallen können die Unterbedingungen den Vorgang noch weiter ausdifferenzieren.

Ein programmierender Dichter.

PS: Ich werde hier ein wenig weiterschmökern, scheint eine digitale Schatztruhe zu sein.

Die Kommentarfunktion wurde nach 180 Tagen automatisch geschlossen.
Fragen zu diesem Thema können auch in meinen Webmaster-Forum gestellt werden: