phpBB2 IPv6-Patch
Verfasst: 13.04.2012 19:54
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:
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 44durch
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]);
}
}
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);
Code: Alles auswählen
$e = explode(':', chunk_split($int_ip, 4, ':'));