Entwickler-Ecke

Internet / Netzwerk - Netzwerkkomponenten


IhopeonlyReader - So 25.05.14 23:23
Titel: Netzwerkkomponenten
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


IhopeonlyReader - 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?


IhopeonlyReader - Fr 30.05.14 09:32

-push-


jaenicke - 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 - 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


IhopeonlyReader - Mo 02.06.14 23:59

-push-


OlafSt - Di 03.06.14 13:29

Hättest es mal selbst ausprobiert, wärst du schon längst fertig mit deinem Projekt.


IhopeonlyReader - Di 03.06.14 15:22

nein :D 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...


Nersgatt - 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.


IhopeonlyReader - 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


Narses - Mi 04.06.14 15:22

Moin!

Um das nochmal auf den Punkt zu bringen (scheint nämlich untergegangen zu sein): :lupe: :shock:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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... :idea: 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:
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
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. :idea:

cu
Narses


IhopeonlyReader - Mi 04.06.14 19:01

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Das ist auch nicht Aufgabe eines WSA-Wrappers, sondern einer Firewall. :idea:

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)


Narses - Fr 06.06.14 11:35

Moin!

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es keine softwaretechnische lösung um eine verbindung abzulehnen?
Sind Firewalls Hardware? :zwinker:

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
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:Du fragst nach einer "guten" (=effizienten, standard) Lösung, aber willst sie dann nicht... ? :nixweiss: 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


IhopeonlyReader - Fr 06.06.14 18:09

aso :D als ein externes programm schreiben, welches die "anfragen" überprüft?


jaenicke - 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 user profile iconNarses auch schon schrieb...


IhopeonlyReader - 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


Martok - So 08.06.14 04:18

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
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.


jaenicke - 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 - So 08.06.14 16:47

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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.


IhopeonlyReader - Mo 09.06.14 14:53

Gibt es eine allgemein gültige Lösung?
selbstgebaute iptables oder so?