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, ':'));