AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ports checken

Ein Thema von S - tefano · begonnen am 16. Dez 2002 · letzter Beitrag vom 23. Dez 2002
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#1

Ports checken

  Alt 16. Dez 2002, 19:40
Hi,

ich will ein Chat- Programm für Lan schreiben. Damit man an einem Rechner mit mehreren anderen gleichzeitig chatten kann, starte ich mehrere Instanzen (eine Instanz kann dabei mit einer Instanz auf nem anderen Rechner kommunizieren).
Das hat die Konsequenz (zumindest so von dem was ich so lese), dass jeder einzelne ChatKanal (nenn ich einfach mal so, ich mein die IP- Verbindung zwischen 2 Instanzen) über einen eigenen Port laufen muss.
Solange nur mein Programm TCP/IP benutzt, is die Portverteilung ja kein Problem... jede Instanz schreibt den Port, den sie benutzt in eine Liste, basierend darauf können die Progs dann untereinander ausmachen, über welchen Port sie kommunizieren wollen (wie ich diese Portverhandlung mache, weiß ich schon).
So, das Problem is allerdings, dass ja so gut wie jeder, dessen Rechner an einem Lan hängt auch Programme laufen hat, die irgendeinen TCP/IP Port benutzen.
Und fremde Programme schreiben ja in keine Liste, welche Ports sie benutzen.
Ich müsste also quasi für jeden Port einzeln überprüfen, ob irgendein Programm diesen für seinen Datenverkehr benutzt.
Und da steckt mein Problem.
Ich hab
1. keine Idee, wie ich die Ports in meinem eigenen Programm quasi durchscannen kann und
2. (was wohl das leichtere von beiden is) weiß ich nicht, wieviele Ports es pro IP- Adresse überhaupt gibt (müsste man ja für die Scanschleife wissen - wenn mans denn per Schleife macht).

Hab schon ziemlich lange nach ner Lösung gesucht, aber noch nix gefunden.
Kann mir also von euch irgendeiner sagen, wie ich eine Auflistung der unbenutzten Ports realisieren kann?

Danke schonmal,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 16. Dez 2002, 19:55
Moin S-tefano,

erst einmal herzlich willkommen.

Ausprobiert hab' ich's bislang noch nicht, aber schau Dir doch mal im PSDK die Funktion GetTcpTable an.
Damit kann man sich eine Tabelle aller TCP Verbindungen mit Local Address/Port und RemoteAddres/Port abfragen.

GetTcpTable ist eine IP Helper Funktion.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 16. Dez 2002, 19:58
Zu 1.
Ob ein Port "besetzt" ist oder nicht, kannst du mit einem ClientSocket testen. Wenn eine Verbindung zustande kommt, hängt ein Server an dem Port, falls nicht, hängt keiner dran.

Zu 2.
Es gibt 2^16 - 1 (65535) Ports pro Rechner. Aber die alle zu überprüfen, ist sehr rechenintensiv. Die ersten 1024 Ports solltest du aber nicht verwenden, diese sind nämlich für Standard-Server reserviert. Bei den 65535 gibts aber ne ganze Menge, die frei sind, also wirst du wohl nicht jeden einzelnen abfragen müssen
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#4
  Alt 16. Dez 2002, 20:17
Hi,

danke, das mit dem Clientsocket is ja sehr gute Idee, wär ich gar nich drauf gekommen.
So viele Ports?
Hui, dann werd ich das mit der Portliste wohl erstmal verwerfen...

Also, vielen Dank nochmal, werd ich in den nächsten Tagen - wenn die Klausuren überstanden sind - an die Arbeit machen.


Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#5
  Alt 16. Dez 2002, 21:12
Hallo,

ich verstehe zwar nicht ganz wie du das meinst, mit der Liste und so, aber wieso nimmst du nicht einfach UDP/IP mit Broatcast Packeten um deine Rechner zu entdecken und die Ports auszutauschen?! Eigentlich sind doch die Ports von ClientSocket egal.


Thomas
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 16. Dez 2002, 21:16
Moin S - tefano,

mal ein kleines Beispiel anbei (siehe Attachement)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7
  Alt 16. Dez 2002, 21:27
Auf meiner Homepoage gibt es jetzt den Internet-Monitor mit Soße. Eventuell hilft das ja etwas. da ist das mit dem IP-Tisch auch drin.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#8
  Alt 16. Dez 2002, 23:08
Hi,

danke @Luckie und Bunny, werds morgen mal ausprobieren.

Aber @Fiasko:
Höhrt sich ja recht interessant an, aber damit kenn ich mich kaum aus...
Kannst du mir dazu n bissken mehr erzählen?
Brauch ich da z.B. andere Komponenten für, und was für Aktionen müsste ich ausführen?
Und:
Jo, das mit der Aussage dass die Ports beim Cliensocket egal sind, leuchtet sogar ziemlich ein, war mir irgendwie in den endlosen Weiten meiner Hirnwindungen abhanden gekommen.
Wobei ich dann fragen muss:
Kann sich ein Client mit einem Server z.B. auf des Servers' Port 6005 oder so verbinden, wenn auf dem Rechner des Clients bereits eine andere Instanz auf selbigem Port eine Serverconnection mit einem anderen Clientrechner hat? Kann ich mir ja eigentlich nich vorstellen, weil sich dann ja auf dem Rechner dann zwei Verbindungen auf einem Port überschneiden würden.
Somit wärs also doch nich egal, wies mit Ports beim Client aussieht.
Ich selbst weiß es nicht genau, was sagt ihr anderen dazu (eure Beispiele genießen nach wie vor Priorität)?

Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#9
  Alt 17. Dez 2002, 07:33
Hallo,

Zitat von S - tefano:
Höhrt sich ja recht interessant an, aber damit kenn ich mich kaum aus...
Kannst du mir dazu n bissken mehr erzählen?
Ich verwende dazu die Internet Component Suite von http://www.rtfm.be/fpiette/indexuk.htm. Sollte aber auch mit den nativen Delphi Komponenten gehen. Bei ICS ist auch ein UDP-Serve rund Client Beispiel enthalten, der auch mit Broadcasts arbeitet (hab in mir zwar noch nich angesehen...).

Zitat von S - tefano:
Kann sich ein Client mit einem Server z.B. auf des Servers' Port 6005 oder so verbinden, wenn auf dem Rechner des Clients bereits eine andere Instanz auf selbigem Port eine Serverconnection mit einem anderen Clientrechner hat? Kann ich mir ja eigentlich nich vorstellen, weil sich dann ja auf dem Rechner dann zwei Verbindungen auf einem Port überschneiden würden.
Ganz einfach, der Port 6005 ist im Listen mode, sobald eine neue Verbindung akzeptiert wird, wird ein neuer Port dynamisch zugewiesen und für die Verbindung verwendet. Auf 6005 können dann weitere verbindungen angenommen werden. Die Ports der ClientSockets sind deshalb vollkommen egal. Du kannst sie ja eh nicht Verwenden, da auf denen bereits eine Verbindung besteht.

Wenn dein Proggie nur im LAN funktionieren soll und es auch nicht so schlimm ist wenn mal ein Packet verlohren geht (UDP arbeitet Verbindungslos und merkt deshalb nicht, wenn Packet eher oder garnich ankommen), dann würde ich nur UDP verwenden. Das macht das ganze nämlich sau einfach: du brauchst ja nur alles per Broadcasts auf nem einheitlichen Port senden (na OK, besser ist wohl Multicast, da kann man Packet mehrere Ziele geben, denn bei Broadcast wird ja jeder Rechner genervt und evtl. noch irgendwas in weiter lokale Segmente geroutet. Für jeden Rechner extra Packete ist auch nicht gerade ressourcensparend und erzeugt unötig viel Traffic.)



Thomas
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#10
  Alt 17. Dez 2002, 18:36
Hi,

hm, das mit dem GetIPTable is ja gar nich schlecht, aber ich glaub in meinem Fall werd ichs erstmal über die Clientsocket- Verbindungsversuchs- Methode probieren.
Ich werd euch auf dem Laufenden halten - besonders was probleme angeht

Bis dann und danke nochmal,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz