J'ai un serveur public (configuré avec indy 10). certains clients inconnus envoient des milliers de messages sans contenu qui modifient l'utilisation du processeur du serveur à 50%. je n'ai pas de pare-feu sur mon serveur, donc j'ai essayé de bloquer les clients inconnus avec ce code:comment bloquer les clients inconnus dans indy (Delphi)
Ceci est une fonction qui fonctionne avec une minuterie:
var
i, j: integer;
begin
IX2 := IX2 + 1;
SetLength(ClientIPs, IX2);
ClientIPs[IX2 - 1] := StrIP;
j := 0;
for i := low(ClientIPs) to high(ClientIPs) do
begin
Application.ProcessMessages;
if ClientIPs[i] = StrIP then
j := j + 1;
end;
if j > 10 then
begin
Result := false;
exit;
end;
Result := true;
Et c'est mon code Timer:
//Reset filtering measures
IX2 := 0;
SetLength(ClientIPs, 0);
donc je peux l'utiliser dans l'événement OnExecute:
LogIP := AContext.Connection.Socket.Binding.PeerIP;
if IPFilter(LogIP) <> true then
begin
AContext.Connection.disconnect;
exit;
end;
//Get Data *********
Data := AContext.Connection.IOHandler.ReadLn();
enfin, si un client envoie l'homme y message dans un court laps de temps, il sera déconnecté. Mais il y a un problème . En fait, après la déconnexion du client, l'événement Onexecute fonctionne toujours et je ne peux pas arrêter l'opération. En tout cas, j'ai besoin de bloquer complètement certaines adresses IP.
Merci
On dirait que vous avez besoin d'un pare-feu. Pourquoi ne pas en utiliser un? –
Donc, je ne peux pas résoudre ce problème: (après la déconnexion du client, l'événement Onexecute fonctionne toujours). n'est-ce pas? – Kermia
Application.ProcessMessages demande des problèmes. Pourquoi est-ce là? –