Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 13:50

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



IPv4 / IPv6 in Datenbank speichern?

Discussion on IPv4 / IPv6 in Datenbank speichern? within the Web Development forum part of the Coders Den category.

Reply
 
Old   #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)); 
Don'yoku is offline  
Old 02/10/2016, 11:00   #2
 
Der-Eddy's Avatar
 
elite*gold: 400
Join Date: Nov 2008
Posts: 67,905
Received Thanks: 19,505
Quote:
Originally Posted by luci12 View Post
::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
Der-Eddy is offline  
Thanks
1 User
Old 02/10/2016, 11:32   #3

 
elite*gold: 21
Join Date: Jun 2009
Posts: 599
Received Thanks: 64
Quote:
Originally Posted by Dere-Eddy View Post
::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 ^^
Don'yoku is offline  
Old 02/10/2016, 11:44   #4
dotCom
 
Devsome's Avatar
 
elite*gold: 9842
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 16,840
Received Thanks: 4,672
Quote:
Originally Posted by luci12 View Post
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.
Devsome is offline  
Old 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)
Don'yoku is offline  
Old 02/10/2016, 21:39   #6
dotCom
 
Devsome's Avatar
 
elite*gold: 9842
The Black Market: 107/0/0
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
Devsome is offline  
Old 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....
Don'yoku is offline  
Old 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"];
ComputerBaer is offline  
Old 02/11/2016, 11:40   #9

 
elite*gold: 21
Join Date: Jun 2009
Posts: 599
Received Thanks: 64
Quote:
Originally Posted by ComputerBaer View Post
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 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
Don'yoku is offline  
Old 02/11/2016, 14:23   #10
dotCom
 
Devsome's Avatar
 
elite*gold: 9842
The Black Market: 107/0/0
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.
Devsome is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.