2017-08-15 6 views
1

Ich muss IPv6-Adressen in IPv4-Adressen konvertieren. Um dies zu tun, habe ich Code aus pedmillon's answer to a related question:Konvertieren von IPv6 zu IPv4-Adresse in PHP

$ipv6 = $_SERVER['REMOTE_ADDR']; 
$ipv4 = hexdec(substr($ipv6, 0, 2)). "." . hexdec(substr($ipv6, 2, 2)). "." . hexdec(substr($ipv6, 5, 2)). "." . hexdec(substr($ipv6, 7, 2)); 

Ich habe versucht, es in meinem localhost und :: 1 wird zu 0.1.0.0 umgewandelt. Funktioniert dieser Code korrekt?

Ich glaube, es sollte 127.0.0.1 anstelle von 0.1.0.0 zeigen.

+6

IPv6-Adressen können nicht in IPv4-Adressen konvertiert werden. Das ist, als wolle man Äpfel in Bananen verwandeln. Für den Anfang gibt es ** 340.282.366.920.938.463.463.374.607.431.768.211.456 ** mögliche IPv6-Adressen, während nur ** 4.294.967.296 ** mögliche IPv4-Adressen. Lass mich also etwas verfeinern: Das ist so, als ob man mehrere Äpfel im Wert von Galaxien in eine Banane verwandeln möchte. – spectras

+0

hmm .. wäre es dann die beste Lösung, wenn ich meinen Apache stattdessen zwingen würde, die IPv4-Adresse zu verwenden? –

+2

Die zukunftssichere Lösung wäre es, ipv6 zu unterstützen. Um den Übergang zu erleichtern, können Sie Ihrem Server mitteilen, dass Sie IP-Adressen in den IP-Adressraum mappen möchten, und von dort aus arbeiten Sie nur mit IPv6. – spectras

Antwort

4

IPv4 und IPv6 sind zwei völlig unterschiedliche gegenseitig inkompatible Netzwerkadressierungsschemata. Es gibt keine Möglichkeit, von einem in den anderen zu "übersetzen". Eine IPv4-Adresse entspricht nicht einer bestimmten IPv6-Adresse oder umgekehrt. Die große Mehrheit der Knoten im Internet verwendet zu diesem Zeitpunkt immer noch ausschließlich IPv4-Adressen, einige wenige Prozent betreiben gleichzeitig einen Dual-Stack von IPv4 und IPv6, und eine verschwindend geringe Anzahl kann ausschließlich IPv6 sein. IPv4- und IPv6-Knoten können nicht direkt miteinander kommunizieren. Auf lange Sicht sollten alle nur auf IPv6 umsteigen, aber das ist noch weit weg.

können Sie erklären, wie kann ich IPv6-Adresse verwenden Länder zu blockieren

auf die gleiche Weise bestimmte Regionen mit IPv4-Block: eine Datenbank erhalten, die IP-Adressen zu geografischen Standorten abbildet. Der einzige Unterschied ist, dass Sie eine Datenbank oder einen Dienst finden müssen, der das für IPv6 Adressen tut.

+0

IP-Block-Attribuierungsschemata machen es sehr viel schwieriger, eine solche Datenbank zu erstellen (nicht zu erwähnen, dass sie viel größer sein wird). In der Tat habe ich nur drei Geolocation-Dienste überprüft, die ipv6 unterstützen, und alle drei haben mein Land falsch. Dito für meinen gehosteten Server. Während mit den ipv4 Adressen sie meinen Standort ziemlich genau lokalisieren (korrekte Nachbarschaft). – spectras

+1

Ich behauptete nicht, dass es einfach oder realistisch wäre ... ;-) – deceze

+0

'Auf lange Sicht sollten alle nur auf IPv6 umziehen, aber das ist noch weit weg.' Wie viele Jahre bin ich damit sicher? ;) –