PCs im Netzwerk - IP auslesen



  • Hi schrieb:

    Bin nicht so der Netzwerkpro, aber google mal nach c++ icmp broadcast.

    Funktioniert unter Windows sicher nicht! Und bei aktiviertem Packet-Filter sicher auch nicht. Ist ja heutzutage Standard...

    Versuche es direkt mit ARP.

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa366071(v=VS.85).aspx



  • Innerhalb des Netzwerks? Why?



  • An Broadcast hab ich auch erst gedacht, aber nichts gefunden -> Idee verworfen.

    @-lowbyte-:
    Gehts ein wenig genauer, ich hab absolut keine Ahnung wonach ich suchen soll...

    Hab auch überlegt, einfach alle möglichen Adressen "durchzupingen", also 192.168.1.X, wobei X 1-255. Aber ich denke nicht das die Lösung optimal und vor allem performant ist...



  • Dass mit ARP bezog ich auf Dein internes Netz ist ja klar. Aber wenn Du ja wie geschrieben nur alle PC an deinem Router finden möchtest, dann hast Du ja auch zugriff auf alle Maschinen und kannst Du Deinen Firewall's sagen dass sie auf ICMP Typ 8 Code 0 (echo request) reagieren sollen. Und dann schlägt auch der Ping versuch nicht mehr fehl. So kannst Du alle Host's in Deinem Subnet erkennen.
    Aber ich würde es direkt mit ARP machen, wenn es nur für das lokale Net sein muss.

    Am einfachsten und am grässlichsten zugleich, ist es natürlich system("") zu verwenden.

    bsp.

    system("for /L %i in (1,1,254) do ping -n 1 -l 0 -w 1 172.16.0.%i");
    

    Oder Du benutzt einfach die IP-Helper Funktionen wie schon gezeigt. Ist auch etwas für ARP dabei.

    Bei einem Ping auf die Broadcast Adresse bekommst Du nur von Linux/Unix artigen Systemen (nicht von allen) standard eine Reply zurück, und auch nur dann wenn keine Firewall/Filter aktiv ist.



  • Hey, vielen dank!

    Ja, ne Ping-Funktion hab ich schon, IcmpSendEcho, das läuft auch.
    System(...) möchte ich wirklich nicht verwenden, das ist irgendwie so...unpassend und gefuscht 😉

    Also wenn ich dich richtig verstanden habe, soll ich wirklich alle mögliches Heimadressen anpingen und gucken was reagiert?
    Das muss doch einfacher bzw. schöner gehen, oder nicht?



  • Sorry für Doppelpost, aber kurze Verständnisfrage:

    system("for /L %i in (1,1,254) do ping -n 1 -l 0 -w 1 172.16.0.%i");
    

    Was ist das für eine IP: 172.16.0.X ?

    Gruß



  • 10.0.0.0 bis 10.255.255.255
    169.254.0.0 bis 169.254.255.255 (APIPA only)
    172.16.0.0 bis 172.31.255.255
    192.168.0.0 bis 192.168.255.255

    Sind alles Bereiche die für Private Netze reserviert sind. (IANA)
    http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml

    Hilfe_Bitte_Danke schrieb:

    Also wenn ich dich richtig verstanden habe, soll ich wirklich alle mögliches Heimadressen anpingen und gucken was reagiert?
    Das muss doch einfacher bzw. schöner gehen, oder nicht?

    Du könntes all Deinen Host im Netzwerk Statisch IP's vergeben und sommit weist Du dann automatisch was Du pingen musst. Folglich ist dass anpingen des ganzen Subnet überflüssig.

    Was hasst Du eigentlich genau vor?

    Grundlagen zu lernen wäre viel gescheiter! 😉



  • Naja, learning by doing...

    Ne, die Sache ist nur, ich hatte eben vor so einen kleines DatenAustauschTcpTool fürs Netzwerk zu basteln.. alles kein Problem, aber zum Thema PCs im Heimnetzwerk auslesen, hab ich einfach nichts gefunden... wundert mich eigentlich, warum es da nichts vom Herrn WinAPI gibt 😉

    Whatever, danke, hat mir sehr geholfen !



  • Hilfe_Bitte_Danke schrieb:

    wundert mich eigentlich, warum es da nichts vom Herrn WinAPI gibt 😉

    Versteh ich jetzt nicht...



  • http://de.wikipedia.org/wiki/Ping_(Datenübertragung)

    (Ganzen!!!) Link kopieren und in die Adressleiste einfügen 🙂



  • @-lowbyte-:
    So tiefgründig war das garnicht gemeint, ich hätte nur gedacht, dass es für so eine relativ wichtige Funktion was in der WinAPI gibt. Von wegen aufrufen und ein Array mit gültigen IPs bekommen 😉
    Nunja, geht ja auch so...

    @-[FracTure]-:
    Danke, danke, aber den Ping selber auszuführen, ist kein Problem, habe ich mit IcmpSendEcho(...) gelöst 🙂



  • Bastel dir ein kleines Tool, welches alle x Minuten oder Sekunden ein UDP-Paket verschickt. Dies installierst du auf alle in Frage kommenden Rechnern.

    Anschließend kannst du anhand dieser UDP-Pakete auswerten wer tatsächlich alles im Netzwerk aktiv ist.



  • Ja wäre auch noch ne Möglichkeit 🙂

    Wollte es aber möglichst ohne zusätzliche Tools lösen... 😉


Anmelden zum Antworten