möchte von dem besucher der Seite die IP auslesen (gemacht mit $_SERVER["REMOTE_ADDR"] , und diese in meine DB (mysql) speichern.
Nun ist die frage wie mach ich es?
Ich hab versucht (aufm Localhost mit IPv6 adresse) es mit inet_pton in nen Int zu wandeln dies dann zu speichern. Hat auch etwas ausgegeben, dies wollte ich dann wieder auslesen und per inet_ntop und umwandeln, gibt mit aber anstatt meiner (wenn ich echo $_SERVER["REMOTE_ADDR"] mache)
::1 (ipv6 denk ich mal)
dies aus:
49.50.51.52
Nun zur frage. Wie fixxe ich das? Sodass es IPv4 und IPv6 richtig in meiner DB sichert?
PHP Code:
$_sql = "UPDATE webform_login SET ip_addr=". inet_pton($_SERVER["REMOTE_ADDR"]). "WHERE id=".$_SESSION["user"]["id"];
mysql_query($_sql);
$_sql = "SELECT ip_addr FROM webform_login WHERE id=".$_SESSION["user"]["id"];
$ip = mysql_query($_sql);
echo inet_ntop(mysql_result($ip,0));
::1 ist der localhost unter IPv6, kurze Schreibweise für 0000:0000:0000:0000:0000:0000:0000:0001
Da du das lokal testest ist das korrekt
Anzumerken sei auch das $_SERVER['REMOTE_ADDR'] die Adresse zurück gibt von der die Request kommt, sofern du z.B. einen Reverse Proxy dazwischen hast wird dieser angezeigt stattdessen
und lokal eben nur localhost
Ich würde übrigens empfehlen als Alternative, ähnlich wie Google Analytics speichert Piwik Besucher (IP Adresse, Browser, Auflösung, etc.) die auf deiner Webseite waren und gibt das schön grafisch aus
::1 ist der localhost unter IPv6, kurze Schreibweise für 0000:0000:0000:0000:0000:0000:0000:0001
Da du das lokal testest ist das korrekt
Anzumerken sei auch das $_SERVER['REMOTE_ADDR'] die Adresse zurück gibt von der die Request kommt, sofern du z.B. einen Reverse Proxy dazwischen hast wird dieser angezeigt stattdessen
und lokal eben nur localhost
Ich würde übrigens empfehlen als Alternative, ähnlich wie Google Analytics speichert Piwik Besucher (IP Adresse, Browser, Auflösung, etc.) die auf deiner Webseite waren und gibt das schön grafisch aus
Das weis ich, es hat aber auch seinen grund das ich nicht google analytics etc will.
Das wird ein Webadmin panel für eine Telefonanlage und ich möchte sehen wer sich wann und von welcher Ip als letztes dort eingeloggt hat um zu sehen wenn was kaputt is wer es war.
Desshalb kommt sowas nicht in frage, und das mitm proxy weis ich ^^
Das weis ich, es hat aber auch seinen grund das ich nicht google analytics etc will.
Das wird ein Webadmin panel für eine Telefonanlage und ich möchte sehen wer sich wann und von welcher Ip als letztes dort eingeloggt hat um zu sehen wenn was kaputt is wer es war.
Desshalb kommt sowas nicht in frage, und das mitm proxy weis ich ^^
Dann logge doch einfach die Uhrzeit (Serverseitig,Clientseitig) sowie der Benutzer der sich eingeloggt hat.
Dazu bei jeder Aktion den Benutzer mit loggen, damit jede Änderungen einem eindeutigen Benutzer zugewiesen werden kann.
IPs sind zwar schön, aber wenn man einen Proxy benutzt bringt das nicht viel.
Notfalls könnte man die dann halt aussperren, also speichern schadet nie.
// Update: Speicher die IP als varchar in deiner Datenbank, dort muss man dann nichts umwandeln.
Problem ist es gibt nur den nutzer root da man damit nur in der TK die verschiedenen Durchwahlen etc einstellen kann.
Und es wird eh nur Intern von Firmen benutzt sprich mit proxy macht es eh keiner. bzw man kommt auch nicht drauf.
Edit: Danke aber für das mit Varchar, ich teste das mal
Edit2: So jetzt macht es garnichts mehr, es läd nichtsmehr in die Datenbank hoch.... (habe das inet_pton weggelassen)
Was mich wundert ist das es wenn ich in dem SQL sag speicher 123456 in $ip und push $ip dann in die DB gehts, versuch ich es mit dem ergebnis von $_SERVER["REMOTE_ADDR"] speichert er garnix....
Hast du es für SQL auch als Zeichenkette erkennbar gemacht? Also '127.0.0.1' und nicht 127.0.0.1
Code:
$_sql = "UPDATE webform_login SET ip_addr='".$_SERVER["REMOTE_ADDR"]."' WHERE id=".$_SESSION["user"]["id"];
Ja hab ich, hab nun aber schon einen Fix dafür entwickelt.
Sogar mit erkennung ob IPv4 oder IPv6, da es probleme gibt wenn man eine IPv4 als IPv6 speichert.
Hier Prüfe ich einfach ob in der IP Punkte vorkommen da dies nur in IPv4's der fall ist.
PHP Code:
$ip = getenv('REMOTE_ADDR');
switch(ipVersion($ip))
{
case 4:
$_sql = "UPDATE webform_login SET ip=INET_ATON('{$ip}') WHERE id=".$_SESSION["user"]["id"];
mysql_query($_sql);
break;
case 6:
$_sql = "UPDATE webform_login SET ip=INET6_ATON('{$ip}') WHERE id=".$_SESSION["user"]["id"];
mysql_query($_sql);
break;
}
Anschließend per Switch Abfage prüfe ich das Ergebnis meiner Funktion, der ich die IP-Adresse mitgegeben habe.
Im Fallle einer IPv4 lade es es mit INET_ATON('IP-Adresse') in die Datenbank.
Bei IPv6 ist es INET6_ATON('IP-Adresse').
Somit wandle ich die IP-Adresse nichtmehr PHP-Seitig um sondern MySQL-Seitig und speicher dies in einen Bin(16) in meiner Datenbank.
IPv4 / IPv6 Problem 03/19/2013 - Technical Support - 0 Replies Heyho Leute,
ich bin seit einer Woche bei Unitymedia Kunde und habe nun meine 50.000er Leitung. Soweit alles super nur habe ich da ein Problem.
Ich habe von Unitymedia ein Cisco-Modem bekommen, was aktuell ein Problem mit der Firmware hat. Dieses wird jedoch erst gegen Sommer diesen Jahres von denen gefixt (sehr schlechte Programmierer laut Techniker). Da das ganze über einen Server von Unity mit der Firmware läuft (Macadresse Whitelisted) kann ich da selbst nichts machen, weil die sich...
von ipv6 auf ipv4 umstellen... HILFE!!! 01/08/2013 - Technical Support - 2 Replies Haben vor kurzem zu KabelBW gewecheselt und wir haben ein Modem mit integriertem Router bekommen Name: cisco EPC3208G
und dieses Model hat nur IPv6 und jetzt kann ich nicht mehr Auf Server zugreifen oder xbox spielen ..
jetzt wollte ich fragen wenn sich jemand auskennt wenn mann das umstellen kann auf ipv4? Bitte um Hilfe