Autor |
Beitrag |
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: So 25.05.14 23:23
Guten Tag,
Allgemein: Ich möchte Komponenten/ Hilfen haben, wie ich relativ "einfach" einen guten TCP-Server-Client-Konstrukt programmieren kann
Hintergrund: Bisher habe ich mit TServerSocket und TClientsocket gearbeitet, tolle Events und sehr Verständlich.
Leider ist dieser Server gerne mal überlastet. Connecten mehrere gleichzeitig hatt er sie in der Clientliste hat sie aber noch nicht ganz erstellt ?!
(Im onconnect event etwas an alle connecten aus den neu connecten senden gab fehler)
Zum anderen ist es nicht möglich eine Verbindung abzulehnen.. jede Verbindung wird standartmäßig angenommen, falls ich sie nicht haben will muss ich sie kicken.
dass hat zur folge, dass der server sehr stark ausgelastet ist.
Clientseitig gibt es bisher keine Probleme...
Mit welchen Komponenten würdet ihr größere Projekte umsetzen, denen auch "kleine" BruteForce attacken nichts machen?
Bin um eure Meinung intressiert, Quelltextanzätze (senden, empfangen, annehmen/abblehnen) wären erwünschenswert
mfG IhopeonlyReader
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Mi 28.05.14 20:47
Sind Indy-Komponenten auch so schnell im Überlauf und haben Probleme mit der Verarbeitung der Clients, wenn es zu schnell geht?
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Zuletzt bearbeitet von IhopeonlyReader am Fr 30.05.14 09:32, insgesamt 1-mal bearbeitet
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Fr 30.05.14 09:32
-push-
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 30.05.14 10:42
Das einzige Problem bei den Indy Komponenten, das wir hatten, ist, dass sie blockierende Sockets verwenden. Wenn ein Request also eine Weile hängt, blockiert der Socket in der Zeit und man kann den entsprechenden Thread in der Zeit auch nicht beenden.
Die einzige große Alternative sind die ICS Komponenten, die auf asynchrone Sockets setzen.
Mit der Geschwindigkeit hatte ich bei beiden bisher keine Probleme, auch bei vielen verbundenen Clients. Man sollte aber in jedem Fall ein sauberes Threadingmodell haben...
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: So 01.06.14 15:38
klingt vielleicht blöd, wie "einfach" sind sie denn?
blockieren sie wenn keine nachricht kommt und man "empfangen" möchte?
oder wie empfange ich pakete? bitte ein kleines codebeispiel
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Mo 02.06.14 23:59
-push-
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
OlafSt
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Di 03.06.14 13:29
Hättest es mal selbst ausprobiert, wärst du schon längst fertig mit deinem Projekt.
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Di 03.06.14 15:22
nein ich habe aktuell vielleicht 15 min pro Tag, die ich am Projekt investieren könnte.. deshalb will ich erst genau wissen mit welchen komponenten es gut umzusetzen ist...
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
Nersgatt
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 03.06.14 16:58
15 Minuten am Tag, um an einem Projekt zu arbeiten? Das wird nichts. Kannst Du nicht 10 Tage nichts dran machen und dann mal 3 Stunden dran arbeiten?
In 15 Minuten hast Du ja nicht mal Zeit, Dein Gehirn warumlaufen zu lassen.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: Narses
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Mi 04.06.14 13:39
deshalb will ich erstmal die komponenten haben um nicht selbst groß suche danach starten zu müssen...
bald hab ich hoffe dann zeit
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.06.14 15:22
Moin!
Um das nochmal auf den Punkt zu bringen (scheint nämlich untergegangen zu sein):
jaenicke hat folgendes geschrieben : | Man sollte aber in jedem Fall ein sauberes Threadingmodell haben... |
DAS ist der Punkt, auf den es ankommt. Es spielt praktisch keine Rolle, was für einen WSA-Wrapper (die Dinger bezeichnet der Wald-und-Wiesen-Delphianer als "Netzwerkkomponenten") du nimmst, du musst aber auf jeden Fall die Verarbeitung der Daten von der Kommunikation trennen! Wenn du bereits Performance-Probleme hast, dann wird dich ein anderer Wrapper nicht weiter bringen, weil du (sehr wahrscheinlich) die Daten nicht verarbeitet bekommst - das hat nix mit der Network-API zu tun... Wenn du API-Access und Verarbeitung im selben Thread hast, kriegst du immer Performance-Probleme, egal mit welchem Wrapper.
Und noch der Vollständigkeit halber:
IhopeonlyReader hat folgendes geschrieben : | Zum anderen ist es nicht möglich eine Verbindung abzulehnen.. jede Verbindung wird standartmäßig angenommen, falls ich sie nicht haben will muss ich sie kicken. |
Das ist auch nicht Aufgabe eines WSA-Wrappers, sondern einer Firewall.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Mi 04.06.14 19:01
Narses hat folgendes geschrieben : | Das ist auch nicht Aufgabe eines WSA-Wrappers, sondern einer Firewall.
|
Gibt es keine softwaretechnische lösung um eine verbindung abzulehnen?
in pyhton zum Beispiel erhalte ich verbindungsdaten und kann entsprechend annehmen bzw abblehnen (durch nicht annehmen)
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 06.06.14 11:35
Moin!
IhopeonlyReader hat folgendes geschrieben : | Gibt es keine softwaretechnische lösung um eine verbindung abzulehnen? |
Sind Firewalls Hardware?
IhopeonlyReader hat folgendes geschrieben : | in pyhton zum Beispiel erhalte ich verbindungsdaten und kann entsprechend annehmen bzw abblehnen (durch nicht annehmen) |
Jung, das ist eine Konzeptfrage, die letztlich sicherheitsrelevant wird: - Es spielt keine Rolle, welches OS oder Socket-API, betrifft alle
- Ein Server-Socket ("listening socket") ist dazu da, Verbindungen anzunehmen und zu bedienen (=Hauptaufgabe)
- Es macht also (im häufigsten Fall) keinen Sinn, erst den Server-Socket entscheiden zu lassen, ob er die Verbindung will (klar, bei einem Login z.B. geht das erst hier, aber ein fehlgeschlagener Login ist auch normalerweise nicht der häufigste Fall)
- Du willst zusätzlich einen Ban (=Verbot) aussprechen, also mit diesem Teilnehmer gar nicht mehr kommunizieren. Das OS und die Socket-API müssen also auch nicht "belastet" werden -> Kontaktaufnahme verweigern -> Firewall (weil: ressourcensparend)
- Jede Lösung, die erst die Socket-API entscheiden (und ggfs. ablehnen) lässt, ist ein Risiko für DoS-Attacken (weil die auf Ressourcen-Auslastung abziehlt)
Du fragst nach einer "guten" (=effizienten, standard) Lösung, aber willst sie dann nicht... ? Der Grund für deine Frage ist vermutlich eher, dass du nicht weißt, wie du das unter Windows mit der Firewall auf die Kette kriegst (das ist auch zugegeben da nicht trivial -> gibt ne Firewall-API), es löst aber nicht das eigentliche Problem, es dann aus Unwissenheit anders machen zu wollen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Für diesen Beitrag haben gedankt: IhopeonlyReader
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Fr 06.06.14 18:09
aso als ein externes programm schreiben, welches die "anfragen" überprüft?
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.06.14 00:10
Dieses Programm gibt es schon, nennt sich Windows Firewall. Du musst dieser nur sagen was sie filtern soll, wie Narses auch schon schrieb...
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Sa 07.06.14 12:10
aber mit lazarus (ebenfalls object pascal) kann ich auch für linux kompilieren, dort gibt es keine windows firewall ?!
aber für den anfang werde ich mir eine windows firewall api mal anschauen
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 08.06.14 04:18
IhopeonlyReader hat folgendes geschrieben : | aber mit lazarus (ebenfalls object pascal) kann ich auch für linux kompilieren, dort gibt es keine windows firewall ?! |
Ja, die haben was richtiges, nämlich iptables.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 08.06.14 11:44
Dafür gibt es dafür leider keine API. Aber man kann dort eine Regel per Shell erstellen und dann die eingetragenen IPs ändern...
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 08.06.14 16:47
jaenicke hat folgendes geschrieben : | Dafür gibt es dafür leider keine API. Aber man kann dort eine Regel per Shell erstellen und dann die eingetragenen IPs ändern... |
Ich persönlich find jetzt "eine Zeile in eine Textdatei schreiben" signifikant einfacher als irgendwelche obskuren (und, so wie ich den "modernen" Teil der MSDN kenne, subtil falsch/haarspalterisch dokumentierten) APIs zu verwenden, aber das ist natürlich Geschmackssache.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
IhopeonlyReader
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Mo 09.06.14 14:53
Gibt es eine allgemein gültige Lösung?
selbstgebaute iptables oder so?
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|