IP-Adresse eines Gerätes im lokalen Netzwerk herausfinden (Kennung/Name bekannt)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    IP-Adresse eines Gerätes im lokalen Netzwerk herausfinden (Kennung/Name bekannt)

    Hallo Leute,

    ich möchte im lokalen Netzwerk nach Geräten mit bestimmten Kennungen suchen und deren IP4-Adresse ermitteln.
    Das soll meinen UserInnen helfen, für ein bestimmtes Gerät die IP-Adresse rasch ermitteln zu können.

    Beispielsweise meldet sich ein Gerät mit der Netzwerkkennung "SDongleA-....." im Netzwerk an oder meldet sich mit der Kennung "BOPV ...." (enthalten nur diese Strings, können aber dahinter auch veränderliche Seriennummern haben).
    Nun soll ein kleines Programm gestartet werden, welches genau nach diesen Kennungen im Netzwerk sucht und die dazugehörige IP ausgibt. Mehr nicht.

    Wie komme ich an die Netzwerknamen um danach die IP-Adresse herauszufinden?

    Wie gehe ich das an, damit das
    a) funktioniert - idealerweise auch ohne Adminrechten
    b) nicht ewig dauert

    LG Roland
    Bilder
    • Netzwerknamen.jpg

      19,06 kB, 780×139, 50 mal angesehen
    • bopv.jpg

      86,6 kB, 618×476, 47 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Ich würde einen Prozess von CMD starten (mit RedirectStandartOutput = true) mit dem Command "arp -a", und dann für alle gelisteten IPs ->Dns.GetHostEntry(ip).Hostname. Ich denke das könnte klappen.

    PS.
    Wenn der Name bekannt ist, kannst du auch das versuchen:

    C#-Quellcode

    1. IPAddress ip = Dns.GetHostEntry("name").AddressList[0];

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    Ich würde es ähnlich machen, nur ohne den Zwischenschritt mit der Konsole.

    Bei StackOverflow habe ich das hier gefunden:
    stackoverflow.com/questions/17132941/arp-request-in-c-sharp

    Du kannst aber auch mit dem lokalen DNS/DHCP arbeiten und für den lokalen Lookup eine Any-Anfrage stellen. Dann würdest du eine Tabelle mit Hostnamen => IP bekommen.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    @DTF
    Funktioniert grundsätzlich (habs ausprobiert), leider ist der Hostname bei jedem Kunde ein anderer.
    Und eigenartigerweise bekomme ich auch über die IP-Adresse bei diesem Gerät den Hostnamen nicht herausgefunden.
    Oder ich mach es falsch.

    @siycah
    Da konnte ich für mich leider nichts verwertbares finden.

    Hier ein holpriger Versuch, der mir aber nur "echte" PCs zurückgibt. Bei allen anderen Geräten im Netzwerk wird kein Hostname angezeigt.
    (siehe Screenshot)

    VB.NET-Quellcode

    1. Dim ping As Ping
    2. Dim addr As IPAddress
    3. Dim pingReply As PingReply
    4. Dim host As IPHostEntry
    5. Dim Ausgabe As String = ""
    6. Parallel.For(0, 255, Sub(i, loopstate)
    7. ping = New Ping()
    8. pingReply = ping.Send("192.168.0." + i.ToString)
    9. If pingReply.Status = IPStatus.Success Then
    10. Try
    11. addr = IPAddress.Parse("192.168.0." + i.ToString)
    12. host = Dns.GetHostEntry(addr)
    13. Ausgabe += "192.168.0." + i.ToString + " " + host.HostName
    14. TouchBeep() ' beept bei jedem erfolgreichen Durchlauf um die Geschwindigkeit festzustellen
    15. Catch ex As Exception
    16. End Try
    17. End If
    18. End Sub)
    19. MsgBox(Ausgabe)
    Bilder
    • 19072024085516.jpg

      193,99 kB, 1.184×505, 38 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „dive26“ ()

    Ich habe gerade die vermutung, das es sich um den Namen des Gerätes handelt was dir bekannt ist, nicht "Netzwerkkennung" oder Hostname. Um via des Computernamens an eine IP zu kommen, kannste einfach pingen. ping COMPUTERNAME, aber wegen der Seriennummern wird das wohl nicht machbar sein, es sei denn die wären bekannt. Via IP an den Computernamen zu kommen geht glaub ich nicht. Ich glaube fast, was du vorhast geht schlicht nicht. Sollten es doch hostnamen sein, dann müssten die entsprechen eingestellt sein, so das z.B. immer eine bestimmte Zeichenfolge enthalten ist, dann kannste die Geräte da dran identifizieren.

    PS.
    @dive26
    Die Bilder lassen mich Vermuten, das du auf Android-Devices Apps laufen hast. Ist das der Fall? Wenn ja, die IPs im Netzwerk listen kannste ja, lausche in der App auf einem Port, hol die IPs und sende dorthin etwas bestimmtes, kommt das in der App an kannste Antworten und dann weist du, das isses.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „DTF“ ()

    @DTF
    Es handelt sich um sehr verschiedene Geräte im Netzwerk.
    Meist IOT-Geräte, Drucker und im speziellen ein WLAN-Modul des Wechselrichters.
    Im Screenshot anbei siehst Du den "Hostnamen", so wie es das TP-Link Omada System von den Geräten ausliest:
    Bilder
    • 19072024095255.jpg

      303,82 kB, 1.031×1.220, 35 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Möglicherweise sind die nicht in deinem DNS Cache(ARP Cache) und deswegen tauchen die nicht auf. Ich schau später mal in einem meiner Bücher nach, was man tun könnte. Richtest du die Systeme beim Kunden ein? Dann kannste denen auch gleich eine statische lokale IP geben. Wegen IOT, auch selbst produzierte Sachen? Dann kannste zumindest dort auf einen Port lauschen bzw. dort eine statische IP festlegen.

    PS.
    @dive26
    Probier das mal aus:
    codeproject.com/Tips/889483/Ho…-info-on-your-WLAN-router
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    @DTF
    Ich richte die Sachen leider nicht direkt beim Kunden ein.
    Beispielsweise müssen die Kunden in der Software die IP-Adresse des Wechselrichters eingeben.
    Aber diese ist weder auf der Wechselrichter-App noch am Wechselrichter selbst ablesbar.
    Diese kann man nur über den Router auslesen. Aber das ist für die meisten User bereits zu kompliziert und für manche gar nicht durchführbar.

    Da wäre es ja super, wenn die Software das Netzwerk scannt und dann die Geräte die in Frage kommen (durch den Hostnamen identifiziert) zur Verbindung vorschlägt.

    Klar könnte man auf jeder IP eine Modbus-TCP Anfrage schicken.
    Aber bei 256 IP-Adressen dauert das ewig (2 Sekunden Antwortzeiten möglich). Manchmal hat der User Modbus TCP auf dem Wechselrichter aber auch noch gar nicht aktiviert und somit gibt dieser gar keine Antwort. Also kann ich nur das Netzwerk durchsuchen, alle Hostnamen auslesen und die in Frage kommenden (String-Compare) vorschlagen.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26 Ich hab den Source von CodeProjekt ausprobiert, das sollte auch bei dir gehen, ausfürzeit ist auch OK, weil parallel. Ich hab aber die Bedingung(If InvokeRequired rausgeworfen, dann gings) und ohne ListView nur Ausgeben lassen
    Diese Devices(Siehe Anhang mit dem ESP32) hat Windows mir vorher nicht gelistet, das hängt wohl mit dem vorher ausgeführten Ping zusammen.

    PS.
    @dive26
    Es wird ja auch "arp -a IP" ausgeführt, daran kann es auch liegen, dadurch könnten die Devices in den Cache gelangt sein. Weil jetzt wird es mir auch angezeigt, wenn ich Dns.GetHostEntry(ip).HostName mit den IPs aus "arp -a" hole. Ich spül später mal meinen DNS Cache und teste ob es wegen dem Ping oder wegen arp -a IP geht.
    Bilder
    • Unbenannt.jpg

      16,02 kB, 453×279, 29 mal angesehen
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „DTF“ ()

    Hab jetzt mal "ipconfig /flushdns" und "arp -d" ausgeführt um den DNS und ARP Cache zu leeren, PC neu gestartet, die IPs von den ESP32 Devices wurden mit arp -a nicht gelistet. Hab dann das mit der MacAdresse aus dem Code auskommentiert(weil dort arp -a IP ausgeführt wird, wollte ja wissen, weshalb das so geht), allein durch das vorherige anpingen gelangen die wohl in den Cache. Sofern deine Devices auf den Ping auch antworten, sollte das dann auch bei dir gehen.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    @DTF
    Aber irgendwie müssen die Netzwerkgeräte (WLAN-Router) auch zu diesen Infos kommen. Da muss es doch einen richtigen Weg geben. Auf den Cache, den MS angelegt hat verlassen - das ist eher ein Glücksspiel. Kann man da nicht irgendwie auf Netzwerkebene runter
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Schuss ins Blaue: Hast Du mal probiert, ob Du mit dem NETworkManager zur gewünschten Info kommst? Das gute Stück soll ja sehr viel können.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    dive26 schrieb:

    Aber irgendwie müssen die Netzwerkgeräte (WLAN-Router)


    Die Devices melden sich ja auch beim Router an, sonst hätten die ja gar kein Zugriff auf's Netzwerk. Bei mir hat das von CodeProject jedenfalls besten funktioniert.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    dive26 schrieb:

    (WLAN-Router) auch zu diesen Infos kommen.



    Ist nicht ganz vergleichbar. Der Router kümmert sich nunmal um das ganze Netzwerk.
    Der bekommt von allen die DHCPDISCOVER-Nachrichten und kümmert sich auch um IP-Adressvergabe mit Eintrag in seine internen Tabellen.

    Ein Reverse-Lookup hätte aber eigentlich das tun müssen, was du möchtest.
    Entweder mit ARP-Liste als Backend oder einfach Brute-Force die IPs im lokalen Netzwerk durchforsten.

    Wobei du bei letzterem auch drauf achten solltest, das korrekte Netzwerk zu nehmen. Nicht jedes ist ein /24er
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.

    VaporiZed schrieb:

    Hast Du mal probiert, ob Du mit dem NETworkManager zur gewünschten Info kommst?
    Das wäre auch meine Idee gewesen.
    Falls du Teile davon in dein Programm einbauen willst:
    Das Programm ist OpenSource und notfalls ist @BornToBeRoot auch hier im Forum erreichbar.

    Aber als ersten Schritt würde ich das Programm installieren und testen, ob es deine gewünschte Info ausspuckt.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --