[Mod] Античит

Ну значит, делайте новый протокол =))) BitTorrent V2


так что выходит, что выход против читеров один:

Это запретить все дырявые клиенты и заставить пользоваться только теми, которые разрешены ?
 
Это не выход.
Для контроля читеров, нужно смотреть реально на данные которые приходят от людей. Клиенты шлют, время, сколько загрузил, сколько раздал.
Эти данные нужно анализировать, смотреть, считать что реально, а что нет.
Смотреть кто обращается по неверному/отсутсвующему пасскею, смотреть кто начал закачку, но не информирует об этом и т.д.
 
Это не выход.
Для контроля читеров, нужно смотреть реально на данные которые приходят от людей. Клиенты шлют, время, сколько загрузил, сколько раздал.
Эти данные нужно анализировать, смотреть, считать что реально, а что нет.
Смотреть кто обращается по неверному/отсутсвующему пасскею, смотреть кто начал закачку, но не информирует об этом и т.д.

Нагрузка наверное на трекер возрастёт, если такие проверки делать.
Хотя, если такая проверка осуществляется один раз в час скажем, то думаю проканает :)
 
Так эта проверка и щас встроена во все трекерные движки. Просто она не проверяет данные которые получены от юзеров, если юзер послал запрос, что он раздал 500 метров, то ему и зачтется эта раздача. Где-то больше, где-то меньше этот баг контролируется, но смысл в том, что невозможно полностью от него избавится..тут уж такой протокол.

Но вот писать некоторые скрипты, для вероятностного определения читеров, можно, но опять же, будете ловить только наглых читеров. Те кто будут потихоньку читерить, никогда не узнаете.
 
Любой античит все равно рано или поздно будет взломан...
 
Есть одно исключение из этого правила: если только это не приватный анти-чит.
 
100% античит - это отдельный демон эмулирующий работу обычного торрент клиента и проверяющий каждый пир, участвующий в обмене (как обычный торрент клиент) на несоответствие данных получаемых напрямую с торрент-клиента пира данным отправленым этим пиром ранее на трекер. Хотя на это дело понадобится отдельный на слабый сервер с неслабым каналом (т.к. трафа там будет просто немеряно). Но это только в теории (на практике такое трудно реализуемо)
 
В базу
Код:
CREATE TABLE `cheaters` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `added` datetime NOT NULL default '0000-00-00 00:00:00',
  `userid` int(10) NOT NULL default '0',
  `torrentid` int(10) NOT NULL default '0',
  `client` varchar(255) NOT NULL default '',
  `rate` varchar(255) NOT NULL default '',
  `beforeup` varchar(255) NOT NULL default '',
  `upthis` varchar(255) NOT NULL default '',
  `timediff` varchar(255) NOT NULL default '',
  `userip` varchar(15) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
в корень
cheaters.php
PHP:
<?
require "include/bittorrent.php";
dbconn();
loggedinorreturn();
if (get_user_class() < UC_MODERATOR)
stderr("Sorry", "Zugriff verweigert  Verschwinde von hier.");
stdhead("Cheaters");
begin_main_frame();
begin_frame("Mцgliche Cheater:", true);
// Will: added this for page links
$res = mysql_query("SELECT COUNT(*) FROM cheaters $limit") or sqlerr();
$row = mysql_fetch_array($res);
$count = $row[0];
list($pagertop, $pagerbottom, $limit) = pager(30, $count, "cheaters.php?");
print("$pagertop");
// end
?>
<script type="text/javascript" src="java_klappe.js"></script>
<form action="takecheaters.php" method=post>
<script language="JavaScript" type="text/javascript">
<!-- Begin
var checkflag = "false";
function check(field) {
if (checkflag == "false") {
for (i = 0; i < field.length; i++) {
field[i].checked = true;}
checkflag = "true";
return "Auswahl wieder enfernern"; }
else {
for (i = 0; i < field.length; i++) {
field[i].checked = false; }
checkflag = "false";
return "Alle auswдhlen"; }
}
function check2(field) {
if (checkflag == "false") {
for (i = 0; i < field.length; i++) {
field[i].checked = true;}
checkflag = "true";
return "Auswahl wieder enfernern"; }
else {
for (i = 0; i < field.length; i++) {
field[i].checked = false; }
checkflag = "false";
return "Alle auswдhlen"; }
}
// End -->
</script>
<?
print("<table width=100%>");
print("<table border=0 width=100% cellspacing=1 cellpadding=4>");
print("<tr align=center><td class=tablecat>#</td>
<td class=tablecat>Benutzer</td>
<td class=tablecat>Registriert am</td>
<td class=tablecat>Torrent</td>
<td class=tablecat>Client</td>
<td class=tablecat>Speed</td>
<td class=tablecat>Uploaded</td>
<td class=tablecat>Zeit</td>
<td class=tablecat>IP</td>
<td class=tablecat>Entfernen</td></tr>\n");
$res = mysql_query("SELECT * FROM cheaters ORDER BY added DESC $limit") or sqlerr(__FILE__, __LINE__);
while ($arr = mysql_fetch_assoc($res))
{
$rrr = mysql_query("SELECT id, username, class, webseed, downloaded, uploaded FROM users WHERE id = $arr[userid]");
$aaa = mysql_fetch_assoc($rrr);
$rrr2 = mysql_query("SELECT name FROM torrents WHERE id = $arr[torrentid]");
$aaa2 = mysql_fetch_assoc($rrr2);
if($aaa["downloaded"] > 0)
{
$ratio = number_format($aaa["uploaded"] / $aaa["downloaded"], 3);
}
else
{
$ratio = "---";
}
$ratio = "<font color=" . get_ratio_color($ratio) . ">$ratio</font>";
$uppd = mksize($arr["upthis"]);
print("<tr><td align=center width=10>$arr[id]</td>");
print("<td align=left><b><a href=userdetails.php?id=$aaa[id]>$aaa[username]</a></b></td>");
print("<td align=center>$arr[added]</td>");
print("<td align=center><u><a href=details.php?id=$arr[torrentid]>$arr[torrentid]</a></u></td>");
print("<td align=center>$arr[client]</td>");
print("<td align=center>$arr[rate]/s</td>");
print("<td align=center>$uppd</td>");
print("<td align=center>$arr[timediff] sec</td>");
print("<td align=center>$arr[userip]</td>");
print("<td class=\"tableb\" valign=\"top\" width=10><input type=\"checkbox\" name=\"remove[]\" value=\"" . $arr["id"] . "\"/></td>");
}
if (get_user_class() >= UC_MODERATOR)
{
?>
<tr>
<td class="tableb" colspan="11" align="right">
<input type="button" value="Alle entfernen" onclick="this.value=check(this.form.elements['remove[]'])"/> <input type="hidden" name="nowarned" value="nowarned"><input type="submit" name="submit" value="Дnderungen ьbernehmen"></td>
</tr>
</table></form>
<?
}
// will: added this for page links
print("<br>$pagertop");
// end
end_frame();
end_main_frame();
stdfoot();
die;
?>
в корень
takecheaters.php
PHP:
<?
require "include/bittorrent.php";
dbconn();
loggedinorreturn();
if (get_user_class() < UC_MODERATOR)
stderr("Извините", "Отказанно в доступе");
stdhead("Cheaters");
begin_main_frame();
begin_frame("Возможные читеры:", true);
// Will: added this for page links
$res = mysql_query("SELECT COUNT(*) FROM cheaters $limit") or sqlerr();
$row = mysql_fetch_array($res);
$count = $row[0];
list($pagertop, $pagerbottom, $limit) = pager(30, $count, "cheaters.php?");
print("$pagertop");
// end
?>
<script type="text/javascript" src="java_klappe.js"></script>
<form action="takecheaters.php" method=post>
<script language="JavaScript" type="text/javascript">
<!-- Begin
var checkflag = "false";
function check(field) {
if (checkflag == "false") {
for (i = 0; i < field.length; i++) {
field[i].checked = true;}
checkflag = "true";
return "Auswahl wieder enfernern"; }
else {
for (i = 0; i < field.length; i++) {
field[i].checked = false; }
checkflag = "false";
return "Alle auswдhlen"; }
}
function check2(field) {
if (checkflag == "false") {
for (i = 0; i < field.length; i++) {
field[i].checked = true;}
checkflag = "true";
return "Auswahl wieder enfernern"; }
else {
for (i = 0; i < field.length; i++) {
field[i].checked = false; }
checkflag = "false";
return "Alle auswдhlen"; }
}
// End -->
</script>
<?
print("<table width=100%>");
print("<table border=0 width=100% cellspacing=1 cellpadding=4>");
print("<tr align=center><td class=tablecat>#</td>
<td class=tablecat>Пользователь</td>
<td class=tablecat>Регистрация</td>
<td class=tablecat>Поток</td>
<td class=tablecat>Клиент</td>
<td class=tablecat>Скорость</td>
<td class=tablecat>Отданно</td>
<td class=tablecat>Скачанно</td>
<td class=tablecat>Айпи</td>
<td class=tablecat>Удаляют</td></tr>\n");
$res = mysql_query("SELECT * FROM cheaters ORDER BY added DESC $limit") or sqlerr(__FILE__, __LINE__);
while ($arr = mysql_fetch_assoc($res))
{
$rrr = mysql_query("SELECT id, username, class, webseed, downloaded, uploaded FROM users WHERE id = $arr[userid]");
$aaa = mysql_fetch_assoc($rrr);
$rrr2 = mysql_query("SELECT name FROM torrents WHERE id = $arr[torrentid]");
$aaa2 = mysql_fetch_assoc($rrr2);
if($aaa["downloaded"] > 0)
{
$ratio = number_format($aaa["uploaded"] / $aaa["downloaded"], 3);
}
else
{
$ratio = "---";
}
$ratio = "<font color=" . get_ratio_color($ratio) . ">$ratio</font>";
$uppd = mksize($arr["upthis"]);
print("<tr><td align=center width=10>$arr[id]</td>");
print("<td align=left><b><a href=userdetails.php?id=$aaa[id]>$aaa[username]</a></b></td>");
print("<td align=center>$arr[added]</td>");
print("<td align=center><u><a href=details.php?id=$arr[torrentid]>$arr[torrentid]</a></u></td>");
print("<td align=center>$arr[client]</td>");
print("<td align=center>$arr[rate]/s</td>");
print("<td align=center>$uppd</td>");
print("<td align=center>$arr[timediff] sec</td>");
print("<td align=center>$arr[userip]</td>");
print("<td class=\"tableb\" valign=\"top\" width=10><input type=\"checkbox\" name=\"remove[]\" value=\"" . $arr["id"] . "\"/></td>");
}
if (get_user_class() >= UC_MODERATOR)
{
?>
<tr>
<td class="tableb" colspan="11" align="right">
<input type="button" value="Удалить всех" onclick="this.value=check(this.form.elements['remove[]'])"/> <input type="hidden" name="nowarned" value="nowarned"><input type="submit" name="submit" value="Изменить"></td>
</tr>
</table></form>
<?
}
// will: added this for page links
print("<br>$pagertop");
// end
end_frame();
end_main_frame();
stdfoot();
die;
?>


Это не весь код
 
MasteRAssassiN, не лишним было бы указывать для какого движка данный античит :)
Вот что значит бездумное копи/пасте...
Особенно нравятся строки типа таких:
CHARSET=latin1 AUTO_INCREMENT=5
И что делать если у меня база в UTF-8 или win1251?
и типа таких
return "Auswahl wieder enfernern"; }
Ну очень информативно :) Похоже в рунете много знатоков немецкого (мне кажется это немецкий, но могу и ошибаться)
Автору спасибо за код, но судя по
Это не весь код
полезность его стремится к 0.
 
Назад
Сверху