Hallo an all, Ich möchte unter C++ gerne das Netzwerk scannen um herausfinden welche Clients verfügbar sind. Am Besten wäre wenn das noch plattformunabhängig wäre :) Generell hab ich schon Qt durchgeschaut, eine solche Funktionalität auf anhieb nicht gefunden. Eine Möglichkeit wäre zB einen Broadcast Ping zu senden und auf die Antwort zu warten - Dies hat jedoch den Nachteil dass es nicht garantiert ist, dass jedes Gerät antwortet bzw. ob es überhaupt funktioniert, denn Broad- oder Multicasts können generell deaktiviert sein. Welche Möglichkeiten bleiben mir des Problem am Besten zu lösen? Danke im Voraus Robert
Robert schrieb: > Welche Möglichkeiten bleiben mir des Problem am Besten zu lösen? keines, es gibt keine Möglichkeit für einen 100% netwerkscann. Man könnte jeden PC einzel anpingen, leider verhindert das sogar die windowsfirewall wenn keine Freigaben vorhanden sind. Man könnte jetzt noch einen Schritt weiter gehen und nach dem ping schauen ob eine MAC-Adresse im arp-cache eingetragen wurde. Aber das geht z.b. nich über Router grenzen hinweg, QT seh ich als GUI Framework, du willst aber ein Netwerkscanner dafür würde ich direkt die Betriessystem funktionen aufrufen.
Peter II schrieb: > Man könnte jeden PC einzel anpingen, leider verhindert das sogar die > windowsfirewall wenn keine Freigaben vorhanden sind. Ja genau - Das ist das Problem. > Man könnte jetzt noch einen Schritt weiter gehen und nach dem ping > schauen ob eine MAC-Adresse im arp-cache eingetragen wurde. Aber das > geht z.b. nich über Router grenzen hinweg, Das ist schonmal ein guter Ansatz, danke. Das funktioniert auch wenn der ping Befehl selbst nicht funktioniert. Funktioniert das auch so, wenn ICMP Pakete vom Router deaktiviert sind? > QT seh ich als GUI Framework, du willst aber ein Netwerkscanner dafür > würde ich direkt die Betriessystem funktionen aufrufen. Ich möchte gerne so plattformunabhängig wie möglich bleiben, von daher würd ich am Liebsten über eine API darauf zugreifen. Qt ist kein reines GUI-Toolkit mehr.
Robert schrieb: > Hallo an all, > > Ich möchte unter C++ gerne das Netzwerk scannen um herausfinden welche > Clients verfügbar sind. Clients für welches Protokoll? > Eine Möglichkeit wäre zB einen Broadcast Ping zu senden und auf die > Antwort zu warten - Dies hat jedoch den Nachteil dass es nicht > garantiert ist, dass jedes Gerät antwortet bzw. ob es überhaupt > funktioniert, denn Broad- oder Multicasts können generell deaktiviert > sein. > > Welche Möglichkeiten bleiben mir des Problem am Besten zu lösen? Kommt drauf an, was du konkret erreichen willst. Ein Broadcast-Ping sagt dir ja nur, daß da irgendein Gerät ist, das irgendwelche Protokolle unterstützen könnte, oder auch nicht. Mit MDNS und DNS-SD können Geräte im lokalen Netz ihre Dienste anbieten, so daß sie von einer entsprechenden Gegenstelle angezeigt werden. Siehe UPNP, Zeroconf, Avahi und wie sie alle heißen. Wenn's dir nur darum geht, eine Übersicht zu bekommen, was so im Netz rumschwirrt, kannst du mal nmap ausprobieren (Achtung: Nur in deinem eigenen Lan nutzen! Da man das zum Einbruch in fremde Netze nutzen kann, wird es von Admins sehr ungern gesehen). Das ist ein Portscanner, der dir auch sagt, welche Ports die Geräte so offen haben und ggf. unter welchem Betriebssystem sie laufen. Einfacher Weg: Die ARP- bzw. DHCP-Liste des Routers ansehen. Da stehen allerdings auch Geräte drin, die grad nicht am Netz hängen. Peter II schrieb: > QT seh ich als GUI Framework, GUI ist nur eines der verschiedenen Module, aus denen Qt besteht. Networking ein anderes.
Rolf Magnus schrieb: >> Ich möchte unter C++ gerne das Netzwerk scannen um herausfinden welche >> Clients verfügbar sind. > > Clients für welches Protokoll? Im Moment unspezifiziert. Wird ein eigenes Protokoll, dass au TCP/IP rausläuft. Rolf Magnus schrieb: > Wenn's dir nur darum geht, eine Übersicht zu bekommen, was so im Netz > rumschwirrt, kannst du mal nmap ausprobieren nmap kenne ich habe ich auch im Einsatz. Nur soll das ja schließlich in einem anderen Programm passieren. Generell möchte ich das Netzwerk scannen um Geräte anzeigen zu lassen mit denen ich mich verbinden könnte, mit meinem noch unspezifizierten Protokoll ;) Sprich Port wird feststehen auf dem ich kommunizieren will.
Robert schrieb: > Das ist schonmal ein guter Ansatz, danke. Das funktioniert auch wenn der > ping Befehl selbst nicht funktioniert. ja > Funktioniert das auch so, wenn ICMP Pakete vom Router deaktiviert sind? was hat das jetzt mit einem router zu tun? Über router hinweg kann man eh nicht mit mac adressen arbeitetn. Und der Router kann ja kaum verhindert das du anderen PCs im Netwerk anpingen kannst.
Robert schrieb: > Hallo an all, > > Ich möchte unter C++ gerne das Netzwerk scannen um herausfinden welche > Clients verfügbar sind. Ja, und das Problem ist genau was? ;-) > Am Besten wäre wenn das noch plattformunabhängig wäre :) Generell hab > ich schon Qt durchgeschaut, eine solche Funktionalität auf anhieb nicht > gefunden. > > Eine Möglichkeit wäre zB einen Broadcast Ping zu senden und auf die > Antwort zu warten - Dies hat jedoch den Nachteil dass es nicht > garantiert ist, dass jedes Gerät antwortet bzw. ob es überhaupt > funktioniert, denn Broad- oder Multicasts können generell deaktiviert > sein. Das funktioniert prinzipiell nicht. > Welche Möglichkeiten bleiben mir des Problem am Besten zu lösen? Die offensichtliche. Um festzustellen ob Du einen (potentiellen) Client erreichen kannst ist die einzige Möglichkeit eine Verbindung mit dem gewünschten Protokoll zu ihm aufzubauen. Alle anderen Möglichkeiten funktionieren nicht weil eine Antwort auf ein Ping (usw. usf.) halt nicht bedeutet dass eine Verbindung auf UDP/TCP Port X nicht gefiltert/geblockt würde. Jedes Netzwerk ist ein Dschungel, und NAT, Firewalls, Blah sind seine Raubtiere/Killer.
Schau dir mal die manpage zu nmap an. Es gibt X Varianten, wie man den genannten Problemen begegnen kann. Voraussetzung ist allerdings schon, dass es nicht schon auf deinem eigenen Rechner klemmt (host based firewall und solchen Kramsch).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.