Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Sa 07.02.15 22:43 
Guten Abend!
Ich betreibe seit einiger Zeit eine App, die auf einen eigen angefertigten Server zugreift.
Jetzt habe ich mal interessehalber eine Attacke simuliert und musste ein erschreckendes Ergebnis feststellen. Der Server geht schon bei ca. 50 gleichzeitgen Connects in die Knie.
Hier mal die Stelle, an der alles ins Rollen gebracht wird:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TServerEventHandler.OnServerExecute(AContext: TIdContext);
var Cmd: String;
    Response: TMemoryStream;
    RequestHandler: TRequestHandler;
begin
 Cmd:= Trim(AContext.Connection.IOHandler.ReadLn);
 RequestHandler:= TRequestHandler.Create;
 try
  Response:= RequestHandler.CreateResponse(Cmd, AContext.Connection.Socket.Binding.PeerIP); // MySQL-Zugriffe etc...
  Response.Seek(0, soFromBeginning);
  AContext.Connection.Socket.Write(Response);
  AContext.Connection.Disconnect(false);
 finally
  RequestHandler.Free;
  Response.Free;
 end;
end;

Außerdem wird auch die maximale TCP-Anzahl überschritten, weshalb nach einer Weile auch die Kommunikation zum MySQL-Server abgeschnitten wird.
Wie lässt sich das nun so optimieren, dass Clients ggf. auch in eine Warteschlange eingereiht werden? Ich bin mir sicher, ihr kennt eine Menge Lösungsansätze!

Vielen Dank schonmal und noch ein schönes Wochenende,
Benny
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1321
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 09.02.15 12:38 
Hey, ich kenne mich mit Indy Komponenten nicht sonderlich aus aber ich denke das die ähnlich sind wie andere.
Hast Du den TServerEventHandler selber implementiert? Ist da ein TIdSocksServer drunter?

Ich habe mir den TIdSocksServer mal grob angesehen und finde die Komponente interessant aufgebaut. Was für einen Scheduler hast du für das verarbeiten der Anfragen festgelegt?
Falls Du nicht möchtest das zu viele Verbindungen zur gleichen Zeit möglich sind oder das eine Verbindung zu einer bereits bekannten IP sofort wieder hergestellt wird kannst Du das via OnBeforeSocksBind verhindern.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?