Broadcast per UDP

Reverent

Erfahrenes Mitglied
Hallo Leute,

Ich möchte gerne einen Broadcast ins Netz senden um zuerfahren welche Rechner gerade erreichbar sind.
Ich habe mich auch schon ein bisschen in die Socketprogrammierung ein gearbeitet, aber ich bekomme das irgent wie noch nicht hin.
Ein Ping kann ich schon über Socket versenden O.K. das halbe Listing stand schon in Internet und ich mußte da nur ein paar Anpassungen machen.
Ich möchte gerne mehr über die Socket's wissen.
Habt Ihr da vielleicht eine paar gute Tutorials oder so ne Art Roadmap wie man generell mit den Socket's arbeitet.

BisDann
 

zovax

Erfahrenes Mitglied
Hallo,

Wie willst du ueber UDP erfahren ob Rechner online sind? UDP ist schon von Natur aus connectionless. Auf einen ICMP Broadcast antworten auch laengst nicht alle Rechner, das haengt dann wieder vom OS ab wie es implementiert ist. Ein ICMP Ping ist also die beste Moeglichkeit, das wirst du wohl fuer jeden Rechner machen muessen (am besten in mehreren Threads). Das kann zwar auch geblockt werden, aber wenn es sich um dein LAN handelt wirst du das ja wissen.

Ich weiss ja nicht, mit welcher Framework Version du arbeitest, aber in .NET 2.0 gibt es integrierte Ping Funktionalitaet. Damit kannst du so etwas sehr sehr schnell pruefen, das sind dann nur wenige Zeilen.

Zu den Sockets:
Socket Programming in C# - Part 1 - Introduction
Socket Programming in C# - Part 2 - Introduction
Sockets in C#
TCP/IP Sockets in C sharp
 

Reverent

Erfahrenes Mitglied
Hallo,
ich arbeite mit 1.1 so muß ich mir die Packete selber zusammen basteln. Die Möglichkeit mit dem Ping habe ich schon "ausprobiert", aber war nicht so erfolgreich.
Wie bekomme ich eigentlich die Subnetmask raus? Dann könnte ich mir die Netzwerkadresse ausrechnen und dann die Zahl der möglichen IP-Addressen, das würde das alles schon sehr einschränken.
Aber das dauert alle sehr lange, deshalb habe ich mir überlegt es über den Broadcast zu machen.
BisDann
 

zovax

Erfahrenes Mitglied
Die Subnetmask muesstest du kennen, wenn es sich um dein LAN handelt. Du kannst kannst die Subnetmask ja aus der aktuellen IP-Knfiguration auslesen, die sollte ja ohnehin fuer die Rechner im gleichen Netz die selbe sein.

Vom Broadcast wuerde ich abraten, damit bekommst du kein vernuenftiges Ergebnis. Das es so langsam ist, liegt wahrscheinlich daran, dass du nicht mit mehreren Threads gearbeitet hast und so nur eine Adresse gleichzeitig anpingen konntest. Das Durchpingen eines /24er Netzes wird mit mehreren Threads nicht mehr als ein paar Sekunden (wenn ueberhaupt) dauern (je nach Threadzahl und Ping Timeout, das kannst du ja aber auch relativ weit runterstellen wenn es sich um ein LAN handelt und man nicht gerade davon ausgeht das etliche Rechner an einem AP oder im gleichen Segment an einem Hub haengen).
 

Reverent

Erfahrenes Mitglied
Hallo,

zu Norbert,
ja der Artikel kommt mir bekannt vor, aber ich finde bei mir nicht die "ManagementClass". Ich wollte die bei Verweise in mein Projekt mit ein fügen, aber da habe ich es auch nicht gefunden.

zu zovax,
ich wollte es aber so machen, das der User nicht seine Subnetmask kennen muß. Also ich soll für jeden ping auf eine IP-Adresse einen eigenen Thread nehmen? Je nach dem wie groß der IP Bereich ist z.B. bei einer Maske von 255.0.0.0 wären das schon 255*255*255-2 Thead's (ich hoffe ich habe richtig gerechnet).

Bis Dann
 

zovax

Erfahrenes Mitglied
Deswegen sage ich ja, du kannst sie auslesen. Du kannst ohnehin nich so viele Threads auf einmal erstellen (Rechnung war nicht ganz richtig :)), das muss nach und nach geschehen. Zb. 64 Threads aufeinmal, wenn diese fertig sind, die naechsten 64 Adressen, und so weiter. Die Threadzahl kann ja variabel/einstellbar sein. Auch die Netzmaske und IP Range koennte einstellbar sein.

Bei so grossen Netzen ist ein Broadcast uebrigens noch viel viel uneffektiver. Du wirst auch kein Netz fnden, wo du komplett eine /8er Netmask hast, das kann gar nicht gut gehen, deshalb solltest du dir um die Anzahl von Adressen mal keine Gedanken machen.

Zur "ManagementClass":
System.Management als Reference einfuegen, dann findest du sie unter System.Management.ManagementClass.
 
Zuletzt bearbeitet:

Reverent

Erfahrenes Mitglied
Hallo,
Was soll ich auslesen meine eigene IP-Adresse oder die Subnetmask?
Ja mit meiner IP und der SubnetMask kann ich mir dann die Netzwerkadresse errechnen um so dann die möglichen IP-Adressen ran zukommen und sie anzupingen.

System.Management als Reference einfuegen, dann findest du sie unter System.Management.ManagementClass.

Wo finde ich das und was meinst du mit "als Reference" einfügen.
 

zovax

Erfahrenes Mitglied
Reverent hat gesagt.:
Hallo,
Was soll ich auslesen meine eigene IP-Adresse oder die Subnetmask?
Beides :)

Reverent hat gesagt.:
Wo finde ich das und was meinst du mit "als Reference" einfügen.
Ich weiss ja nicht was du fuer eine IDE benutzt, bei VS2005/2003:
Im Solution Explorer wo dein Projekt steht: Rechte Taste auf References (weiss nicht wie es in der deutschen Version heisst) -> Hinzufuegen -> System.Management.dll auswaehlen.
 

Neue Beiträge