Die interne phpBB Funktion war mir nicht ausreichend genug, da man jeden Beitrag einzeln durchklicken musste um doppelte Nutzeraccounts zu erkennen.
Daher hier meinen Mod "Shared IP-Adresses":
öffne includes/usercp_viewprofile.php und suche nach:
Code: Alles auswählen
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
Code: Alles auswählen
//
// obtain the last ips of this user
//
if ( $userdata['user_level'] == ADMIN )
{
$amount_of_ips_to_check = 1;
$days_to_check = 3; // f.e. "3" for 3 days in the past and 3 days in the future
$ips = array();
$user_ids = array();
$sql = 'SELECT poster_ip, post_time
FROM ' . POSTS_TABLE . '
WHERE poster_id = ' . $profiledata['user_id'] . '
GROUP BY poster_ip
ORDER BY post_time DESC
LIMIT ' . $amount_of_ips_to_check;
$result = $db->sql_query($sql, false, __LINE__, __FILE__);
while ($row = $db->sql_fetchrow($result))
{
$ips[ $row['post_time'] ] = $row['poster_ip'];
}
$db->sql_freeresult($result);
if ( $ips )
{
foreach ( $ips as $post_time => $ip )
{
$sql = 'SELECT poster_id
FROM ' . POSTS_TABLE . '
WHERE poster_id <> ' . $profiledata['user_id'] . '
AND poster_id <> ' . ANONYMOUS . '
AND poster_ip = \'' . $ip . '\'
AND post_time >= ' . ($post_time - ($days_to_check * 86400)) . '
AND post_time <= ' . ($post_time + ($days_to_check * 86400));
$result = $db->sql_query($sql, false, __LINE__, __FILE__);
while ( $row = $db->sql_fetchrow($result) )
{
$user_ids[] = $row['poster_id'];
}
$db->sql_freeresult($result);
}
if ( $user_ids )
{
echo('<span class="den">The last ' . $amount_of_ips_to_check . ' IP-Adresses of ' . $profiledata['username'] . ' are shared with these users in a timeframe of ' . ($days_to_check * 2) . ' days:<br />');
$user_ids = array_unique($user_ids);
$sql = 'SELECT user_id, username
FROM ' . USERS_TABLE . '
WHERE user_id IN(' . implode(',', $user_ids) . ')';
$result = $db->sql_query($sql, false, __LINE__, __FILE__);
while ( $row = $db->sql_fetchrow($result) )
{
echo('<a href="' . append_sid('profile.php?mode=viewprofile&u=' . $row['user_id']) . '">' . $row['username'] . '</a> ');
}
$db->sql_freeresult($result);
echo('<br />Notice: IP-Addresses of AOL-Users are shared by standard.</span>');
}
}
}
Wenn der Index gesetzt wurde ändert ihr die "1" bei "$amount_of_ips_to_check" in z.B. "100". Damit fahre ich recht gut. Ich hab die "1" jetzt nur gemacht, damit ihr nicht gleich den Server überlastet, wenn ihr den Mod einbaut und den Index vergesst.
Nach dem Einbau klickt ihr einfach auf das Profil eines Nutzers, den ihr verdächtigt. Unten wird dann angezeigt, ob der Nutzer die gleiche IP hat, wie andere Nutzer des Forums. Aber nur dann, wenn sich die gemeinsam genutzte IP im gleichen Zeitraum von 6 Tagen (3 Tage zurück und 3 Tage voraus) befindet.
Testen kann man das sehr gut bei Nutzern, die AOL benutzen. Die nutzen ständig ihre IPs gemeinsam. Das liegt sozusagen in der Natur der Sache. Aber bei anderen Nutzern ist das äußerst hilfreich.
Oder ihr geht mal die Nutzer durch, die ihr vor kurzem gesperrt (nicht gelöscht) habt. Dann lässt sich häufig erkennen, dass diese sich erneut angemeldet haben

Man kann aber nicht immer davon ausgehen, dass es ein doppelter Account ist. z.B. kann es sein, dass es Freunde sind und der eine vom Rechner des anderen geschrieben hat, die Nutzer im gleichen Internetcafe waren (unwahrscheinlich) oder aus einem Haushalt stammen etc. Daher seht diesen Mod nur als Hilfestellung bei Eurer Suche.

Anregungen und Kritik erwünscht.
Gruß
Marc
EDIT:
Bessere Identifikation:
Zur genaueren Identifikation von Nutzern müsste man diese Daten erfassen:
- IP-Adresse
- Browserdaten
- Cookie
Ich habe schon überlegt ein zusätzliches Cookie zu speichern, in dem eine zufällige ID gespeichert wird z.B. md5(time()). Diese ID könnte ich dann immer wieder auslesen und mir aus den drei oben genannte Daten sodann einen eindeutigen Schlüssel bauen:
Code: Alles auswählen
§schluessel = md5($ip_adresse . $browserdaten . $cookie_id);
Any comments?