• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] IPv4 und IPv6 auf einer seite anzeigen lassen

SCORRPiO

New member
Hallo zusammen,
ich schlage mich schon seit Wochen damit herum auf einer Internet Seite sie IPv4 und IPv6 anzuzeigen.

Mittlerweile bin ich schon so weit gekommen, das ich unter Apache es eingestellt habe das jeweils 1 php Skript mit IPv4 und IPv6 abgerufen wird und die Werte an die Hauptseite übergeben. Soweit auch kein Problem. Kommt einer per IPv4 only auf die Seite, wird IPv4 angezeigt, kommt einer per IPv6 auf die Seite und besitzt auch eine IPv4 so werden beide angezeigt.

Nun aber das Problem:
Kommt einer per IPv6 auf die Seite, hat aber keine IPv4 (weiso auch immer), dann bekomme ich keine IP als Ausgabe (aktuell die Info das kein JS aktive ist) Aktiviere ich v4 wieder ist alles OK.

Gleichzeitig soll geprüft werden ob die fehlende Infos nicht durch einen Addon geblockt wird (wie z.B. noScript oder Deaktivierung von JS im Browser)


Sieht jemand wo ein Fehler ist oder hat jemand einen besseren Vorschlag wie ich es realisieren kann?


Aufbau soll wie folgt sein:
IPv4 only = IPv4
IPv6 only = IPv6
IPv4 and IPv6 = beide anzeigen
wird keine angezeit = Prüfen ob per Skript geblockt wird.


hier einmal die Codeschnipsel die ich erstellt habe

startseite.html
HTML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="de_DE" lang="de_DE" xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
  $regs="";
  $ip = $_SERVER[REMOTE_ADDR];
?>

<script src="http://myip-ipv6.domain.de" type="text/javascript"></script>
<script src="http://myip-ipv4.domain.de" type="text/javascript"></script>
<script language="javascript">
function start(){
 ip4 = ipv4();  
 ip6 = ipv6();  
}
</script>

</head>
<body onLoad="start();">

if (ereg("^(222.20.(1[6-9][0-9])|172.16.0).[0-9]{1,3}$",$ip, ))    {
?>
  <div id="v4"></div>
  <br>
<?php
} 
elseif (ereg("^(20D2:408((:[a-f0-9]{0,4}){1,6}))$",$ip, $regs))    {

  ?>
v6       <div id="v6"><b>Zur richtigen Anzeige dieser Seite wird Javascript benötigt!</b></div>
v4       <div id="v4"></div>
<?php
}
?>

v4/index.php
PHP:
<?php
$ip = "Ihre IPv4-Adresse lautet: $_SERVER[REMOTE_ADDR]";
echo "function ipv4()
{
document.getElementById('v4').innerHTML = '$ip';
}";
?>

v6/index.php
PHP:
<?php
$ip = "Ihre IPv6-Adresse lautet: $_SERVER[REMOTE_ADDR]";
echo "function ipv6()
{
document.getElementById('v6').innerHTML = '$ip';
}";
?>


Danke schon mal
 
Wenn nur v4 oder v6 alleine vorhanden sind, bekommst du eine Fehlermeldung in der Fehlerkonsole, da entweder die Funktion ipv4() oder ipv6() nicth definiert sind.
Da ipv4() zuerst aufgerufen wird, hat es kein Problem, wenn danach ipv6() nicht definiert ist. Anders herum wirft aber JS bei dem fehlenden ipv4() einen Fehler und ipv6() wird nicht mehr ausgeführt.
Du musst also zuerst immer erst prüfen, ob die Funktion auch wirklich existiert:
Code:
function start(){
	if (window.ipv4){
		ipv4();
	}
	if (window.ipv6){
		ipv6();
	}
}
 
Danke!
Genau daran hat es gelegen.
Und danke für den Link zur Fehlerkonsole, wird mir sicherlich sehr hilfreich sein ;)
 
Zurück
Oben