|
You last visited: Today at 13:50
Advertisement
IPv4 / IPv6 in Datenbank speichern?
Discussion on IPv4 / IPv6 in Datenbank speichern? within the Web Development forum part of the Coders Den category.
02/10/2016, 10:30
|
#1
|
elite*gold: 21
Join Date: Jun 2009
Posts: 599
Received Thanks: 64
|
[GELÖST] IPv4 / IPv6 in Datenbank speichern?
Hey leute, ich hab n problem.
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));
|
|
|
02/10/2016, 11:00
|
#2
|
elite*gold: 400
Join Date: Nov 2008
Posts: 67,905
Received Thanks: 19,505
|
Quote:
Originally Posted by luci12
::1 (ipv6 denk ich mal)
|
::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
|
|
|
02/10/2016, 11:32
|
#3
|
elite*gold: 21
Join Date: Jun 2009
Posts: 599
Received Thanks: 64
|
Quote:
Originally Posted by Dere-Eddy
::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 ^^
|
|
|
02/10/2016, 11:44
|
#4
|
dotCom
elite*gold: 9842
Join Date: Mar 2009
Posts: 16,840
Received Thanks: 4,672
|
Quote:
Originally Posted by luci12
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.
|
|
|
02/10/2016, 13:24
|
#5
|
elite*gold: 21
Join Date: Jun 2009
Posts: 599
Received Thanks: 64
|
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)
|
|
|
02/10/2016, 21:39
|
#6
|
dotCom
elite*gold: 9842
Join Date: Mar 2009
Posts: 16,840
Received Thanks: 4,672
|
Kann dir morgen mal ein Beispiel machen wenn du magst wie du die IP Adressen bei jedem login in die Datenbank speicherst wenn du magst
|
|
|
02/11/2016, 08:20
|
#7
|
elite*gold: 21
Join Date: Jun 2009
Posts: 599
Received Thanks: 64
|
Gerne.
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....
|
|
|
02/11/2016, 11:21
|
#8
|
Moderator
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
|
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"];
|
|
|
02/11/2016, 11:40
|
#9
|
elite*gold: 21
Join Date: Jun 2009
Posts: 599
Received Thanks: 64
|
Quote:
Originally Posted by ComputerBaer
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.
PHP Code:
function iperkennung($txt)
{
return strpos($txt, ".") === false ? 6 : 4;
}
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.
Hoffentlich hilft das irgendjemandem
|
|
|
02/11/2016, 14:23
|
#10
|
dotCom
elite*gold: 9842
Join Date: Mar 2009
Posts: 16,840
Received Thanks: 4,672
|
Eine simple Methode beim erfolgreichen Login
Code:
<?php
$config['dbhost'] = "localhost";
$config['dbuser'] = "user";
$config['dbpass'] = "pw";
$config['db'] = "db";
@$db = mysql_connect($config['dbhost'], $config['dbuser'], $config['dbpass']);
if($db==false){
return "database error {1}";
}
@mysql_select_db($config['db'], $db);
if(filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
$ver = 1; //IPv6
} else {
$ver = 0; //IPv4
}
// Bei jeder aktion ausführen
$query = "INSERT INTO `ipsave` (`ip`,`ver`)
VALUES
('" . $_SERVER['REMOTE_ADDR'] . "','" . $ver . "')";
@mysql_query($query, $db);
echo "Saved.";
Tabelle
Code:
CREATE TABLE `ipsave` (
`ID` int(11) NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ip` varchar(50) COLLATE latin1_german1_ci NOT NULL,
`ver` tinyint(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
Bei mir speichert er so IPv4 und IPv6 Adressen.
|
|
|
Similar Threads
|
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
|
All times are GMT +1. The time now is 13:51.
|
|