Seite 1 von 1

phpBB2 IPv6-Patch

Verfasst: 13.04.2012 19:54
von Bachsau
Ausgehend von unvollständigem Code in einem anderen Thread habe ich gerade einen Patch geschrieben, der phpBB2 IPv6-Fähig macht (Sticky?).

Dafür werden zunächst in der Datei includes/functions.php die Funktionen encode_ip und decode_ip durch folgenden Code ersetzt:

Code: Alles auswählen

function encode_ip($dotquad_ip)
{
	if (strpos($dotquad_ip, ':') !== false && strpos($dotquad_ip, '.') === false)
	{
		// ipv6 - "::1" => "0000000000000000000000000001"
		$new_ip = '';
		if(strstr($dotquad_ip,"::" ))
		{
			$ip_sep = array();
			$e = explode(":", $dotquad_ip);
			$s = 8-count($e);
			foreach($e as $value){
				if ($value == '')
				{
					for($i = 0; $i <= $s; $i++) $ip_sep[] = 0;
				}
				else
				{
					$ip_sep[] = $value;
				}
			}
		}
		else
		{
			$ip_sep = explode(':', $dotquad_ip);
		}
		for ($i = 0; $i <= 7; $i++) $new_ip .= str_pad($ip_sep[$i], 4, '0', STR_PAD_LEFT);
		return $new_ip;
	}
	else
	{
		// ipv4 - "127.0.0.1" => "7F000001"
		$ip_sep = explode('.', $dotquad_ip);
		return sprintf('%02x%02x%02x%02x', $ip_sep[0], $ip_sep[1], $ip_sep[2], $ip_sep[3]);
	}
}

function decode_ip($int_ip)
{
	if (strlen($int_ip) == 32)
	{
		// ipv6 - "0000000000000000000000000001" => "::1"
		$hexipbang = array();
		$e = str_split($int_ip, 4);
		foreach($e as $key => $value)
		{
			$value = ltrim($value, '0');
			$hexipbang[] = $value ? $value : '0';
		}
		$new_ip = implode(':', $hexipbang);
		if (preg_match_all('/:(0:)+/s', $new_ip, $zeros, PREG_PATTERN_ORDER))
		{
			rsort($zeros[0], SORT_STRING);
			$new_ip = str_replace($zeros[0][0], '::', $new_ip);
		}
		return $new_ip;
	}
	else
	{
		// ipv4 - "7F000001" => "127.0.0.1"
		$hexipbang = explode('.', chunk_split($int_ip, 2, '.'));
		return hexdec($hexipbang[0]). '.' . hexdec($hexipbang[1]) . '.' . hexdec($hexipbang[2]) . '.' . hexdec($hexipbang[3]);
	}
}
Anschließen müssen in der Datenbank noch folgende Felder auf VARCHAR(32) geändert werden:
banlist.ban_ip, posts.poster_ip, privmsgs.privmsgs_ip, sessions.session_ip, sessions_keys.last_ip, vote_voters.vote_user_ip

Euer phpBB2 ist jetzt, mit Ausnahme der Bann-Funktion, IPv6-fähig. Das heißt, ihr könnt niemand anhand einer IPv6 bannen. Gebannte Accounts sind natürlich auch über IPv6 gebannt! Da ich mir den Code nicht angesehen habe, ist es besser, gar nicht per IP zu bannen, um Fehlfunktionen zu vermeiden.


Anwender von PHP 4 ersetzen bitte die Zeile 44

Code: Alles auswählen

      $e = str_split($int_ip, 4);
durch

Code: Alles auswählen

      $e = explode(':', chunk_split($int_ip, 4, ':'));

Re: phpBB2 IPv6-Patch

Verfasst: 13.04.2012 20:49
von MDuss
Danke für den Post.

Werde das nachher (am Wochenede) ins Forum einbauen.

Was stimmt denn mit der Bannfunktion nicht, bzw. was genau läuft da verkehrt?
Denn iin meinem Forum habe ich ein paar IPs gebannt, die aus China stammen. Eventuell Bots????

MfG
MDuss

Re: phpBB2 IPv6-Patch

Verfasst: 14.04.2012 01:52
von Bachsau
Hab ich nicht untersucht. Auf jeden Fall geht die von IPv4 aus. Aber wenn man keine Schreibrechte für Gäste hat, muss man in der Regel keine IPs bannen. Vielleicht fix ich's irgendwann, aber da ich's nicht brauch', und grad keine Zeit hab, kann das dauern.

Re: phpBB2 IPv6-Patch

Verfasst: 15.04.2012 15:09
von Andreas0815
Hallo Bachsau,

zuerst einmal vielen Dank für Deine PN mit Hinweis auf diesen Thread :)

Den von Dir überarbeiteten Code habe ich mal eingebaut und er scheint gut zu funktionieren - sogar das ACP geht jetzt wieder, da bin ich mit IPv6 zuvor immer rausgeflogen :D

Wenn es noch was gibt bitte wieder per PN benachrichtigen - ich schaue hier im Normalfall nicht vorbei und bekomme dann nur durch die E-Mail-Benachrichtigung bei neuer PN mit, das nach mir verlangt wird.

Re: phpBB2 IPv6-Patch

Verfasst: 16.04.2012 22:22
von Dungeonwatcher
Hi! 8)
Bachsau hat geschrieben:Ausgehend von unvollständigem Code in einem anderen Thread habe ich gerade einen Patch geschrieben, der phpBB2 IPv6-Fähig macht (Sticky?).
Großes Danke. :)

Bye