Seite 1 von 1

BeitragVerfasst: Fr 4. Apr 2008, 23:49
Author: Spike2
Hier ein nicht zu Ende gedachter Anfang:

Code: Alles auswählen
 

// Spike2 - ServerAnalyzer - START
bool CServerConnect::IsPossibleFakeServer(const CServer* pServer) const
{
 // The criterions on which the analyzing procedure is based are taken from
 // [url=http://forum.emule-project.net/index.php?showtopic=100907&st=40&p=747659&#entry747659]http://forum.emule-project.net/index.php?showtopic=100907&st=40&p=747659&#entry747659[/url]

 // Servers with no name are highly suspicious...
 if (pServer->GetListName().IsEmpty())
 {
  return true;
 }

 // Servers  with no description aren't really trustworthier...
 if (pServer->GetDescription().IsEmpty())
 {
  return true;
 }

 //Let's check the files/user ratio. Normally the files divided through the users should give back
 //a value not higher than 300 (meaning the average number of files shared per user on this server).
 //A too low value is suspicious, too !
 INT ratio;
 
 ratio = (pServer->GetFiles() / pServer->GetUsers());

 if ((ratio < 50) || (ratio > 300))
 {
  return true;
 }


 //No or just few LowID-Users on server is a sign for servers giving fake-highIDs...
 if (pServer->GetLowIDUsers() < 500)
 {
  return true;
 }

 //Does the server accept files ?
 if ((pServer->GetHardFiles() == 0) || (pServer->GetSoftFiles() == 0))
 {
  return true;
 }

 //A state-of-the-art-server should support Large files...otherwise it's using an old version of
 //the server-software.
 if (!pServer->SupportsLargeFilesTCP() && !pServer->SupportsLargeFilesUDP())
 {
  return true;
 }

 return false;
}
// Spike2 - ServerAnalyzer - END


Obwohl das Ding mit Heuristik nix am Hut hat und sehr simpel gestrickt ist, hat das Teil in erster Tests doch wirklich recht zuverlässig Fake-Server als solche erkannt (und die "Guten" in Frieden gelassen)....

Jetzt die Frage: Wie implementieren ? Welche Folgen resultieren aus einem erkannten Fake-Server ? SharedFileList nicht senden und sofortiger Disconnect ? In der Liste markieren oder gleich entfernen ?

Also - können / wollen wir aus diesem Anfang etwas machen ?

BeitragVerfasst: Sa 5. Apr 2008, 01:32
Author: Tuxman
Na ja... es geht ja vorrangig um mögliche Fakeserver (wer weiß das schon so genau)... eher niedrigste Priorität setzen als direkt entfernen.
Auch ganz nett wäre vllt. eine Möglichkeit, den Spamfilter damit zu verbinden... (für eine detaillierte Überlegung bin ich bereits zu müde.)

Nachtrag:
Das mit dem "zu niedrigen Wert" bei der ratio betrachte ich auch kritisch... ich komme bei mir selbst auch selten auf dreistellige Zahlen.

BeitragVerfasst: Sa 5. Apr 2008, 07:57
Author: dlarge500
die Idee is schonmal gut aber dierekt löschen is heftig.Ich würde gestaffelt Prios setzen und bei einem sehr niedrigen Wert den Server löschen lassen.

Denn isser mal gelöscht dann is die server.met hin.

BeitragVerfasst: Sa 5. Apr 2008, 08:33
Author: WiZaRd
Ich vergebe "Trustratings" die ich im Server-Fenster anzeige (von 0-100%) - so kann der User immer noch entscheiden ob er connecten will oder nicht... vom entmündigen halte ich nichts.

BeitragVerfasst: So 6. Apr 2008, 09:22
Author: taz
Hier ein nicht zu Ende gedachter Anfang:

Code: Alles auswählen
 
...

 //A state-of-the-art-server should support Large files...otherwise it's using an old version of
 //the server-software.
 if (!pServer->SupportsLargeFilesTCP() && !pServer->SupportsLargeFilesUDP())
 {
  return true;
 }

 return false;
}
// Spike2 - ServerAnalyzer - END


Question : shouldn't it be ?
Code: Alles auswählen
if (!pServer->SupportsLargeFilesTCP() || !pServer->SupportsLargeFilesUDP())


- otherwise might support large files only for TCP (UDP support won't be checked ...)

Since this is last check I'd go (but that's codding style) and won't hurt readability :

Code: Alles auswählen
return (!pServer->SupportsLargeFilesTCP() || !pServer->SupportsLargeFilesUDP());


(assuming the check should be revised)

BeitragVerfasst: Mi 9. Apr 2008, 19:34
Author: taz
I've added to SharkX :

questionable servers in red - thus I found it more useful as :

bool CServer::IsPossibleFakeServer() const