lokale IP-Adresse mit MAC-Adresse oder Client-Hostname ermitteln

  • VB.NET

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

    lokale IP-Adresse mit MAC-Adresse oder Client-Hostname ermitteln

    Hi,

    wie kann ich in einem lokalen Netzwerk die vom DHCP-Server dynamisch vergebene IP-Adresse eines Netzwerkgeräts ermitteln.

    Mir steht hierzu entweder die MAC-Adresse oder der Client-Hostname des Netzwerkgwerätes zur Verfügung.

    Danke.
    Du kannst mit

    VB.NET-Quellcode

    1. Dns.GetHostEntry("Hostname")


    den Hostnamen auflösen lassen. Die Property AddressList enthält dann die zugehörigen IPs.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Das ist so aber nicht ganz korrekt. Es gibt keinerlei direkte Verpflichtungen, dass sich Hosts auch vom DNS durch ihre Hostnames beim DHCP auflösen lassen müssen.
    Bei den meisten FritzBox/Plasteroutern klappt das aber.
    In Firmen würd ich das mit nem einfachen nslookup Rechnername vorher mal testen. ;)

    Gruß,
    Manawyrm

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manawyrm“ ()

    So gehts :

    VB.NET-Quellcode

    1. For Each Value In System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList
    2. If Value.ToString.StartsWith("192.168.") Then
    3. Label1.text = value
    4. End If
    5. Next
    Hallo,

    ich möchte zu meiner Anfrage noch was zum Hintergrund sagen.

    Ich habe einen RS232 nach Ethernet Umsetzer. Dieser Gateway benötigt keinen virtuellen COM-Treiber. Er wird über die IP-Adresse : Port angesprochen.

    Der Gateway sendet kontinuierlich seine Nutzdaten. Diese kann man z.B. im Internetbrowser über IP:5000 (z.B. 192.168.1.10:5000) ansprechen und werden dann kontinuierlich in den Browser gestreamt. Die IP-Adresse wird vom Router vergeben und kann sich natürlich ändern.

    Ich möchte nun versuchen, ein kleines Programm zu schreiben, dass diesen Gateway automatisch findet und dann die gesendeten ASCII-Daten in einem String entgegen zu nehmen um sie aufzubereiten und anzuzeigen.

    Vielen Dank für eine kleine Hilfestellung.

    forumarbeit schrieb:

    Die IP-Adresse wird vom Router vergeben
    Das Gateway lässt sich doch bestimmt auch ohne DHCP mit fester Adresse konfigurieren.
    Wenn nicht, kann man dies dem DHCP-Server im Router beibringen, dass für eine bestimmte Mac-Adresse eine feste IP-Adresse vergeben wird.
    Oder man setzt die Lease-Time so hoch, dass die einmal vergebene Adresse quasi statisch ist.

    Wenn du mit dem allem nicht zu Rande kommst, kannst du einen IP-Scan auf Port 5000 absetzen.
    Wenn's ein Class-C-Netzwerk ist, sind das ja nur 254 Adressen.
    Oder weniger.
    Ggf. im Router nachschauen, wie groß der DHCP-Range ist.
    Dieser Thread könnte dabei hilfreich sein:
    [VB.NET] IP-Scanner
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    petaod schrieb:

    Dieser Thread könnte dabei hilfreich sein:
    [VB.NET] IP-Scanner



    Ist leider nicht ganz das was ich brauche.

    Im Prinzip benötige ich mindestens die Funktion von der Windowsfunktion "arp /a".

    Hier werden mir die IP-Adressen mit den dazugehörigen MAC-Adressen angezeigt.

    Wenn ich dies in VB 2010 nachbilden könnte, dann kann ich anhand der erhaltenen und mir bekannten MAC-Adresse auf die IP-Adresse kommen und somit dann das Gateway ansprechen.

    Wäre es denkbar, arp mit Process.Start auszuführen und das Ausgabeergebnis in eine Listbox oder ähnlich einzutragen? Wobei dies bestimmt nicht die beste Lösung wäre! oder?

    Kann man mit Process.Start ein Programm z.B. arp aufrufen ohne dass das CMD-Fester angezeigt wird?

    Gruß
    Kann man mit Process.Start ein Programm z.B. arp aufrufen ohne dass das CMD-Fester angezeigt wird?
    Wenn du arp.exe aufrufst, wirst du sicher kein CMD-Fenster bekommen.
    Im übrigen hat die Process-Klasse sehr viele Properties. Einfach mal nachschauen.

    Ist leider nicht ganz das was ich brauche.
    Schön.

    Was ist mit den pragmatischen Vorschlägen im ersten Teil meines obigen Beitrags?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Bitte entschuldigt falls ich nerve ! ?(
    Aber ich habe noch einige Problemchen zu lösen aber immer eins nach dem anderen.

    petaod schrieb:

    Was ist mit den pragmatischen Vorschlägen im ersten Teil meines obigen Beitrags?
    Bitte entschuldige, dass ich hierauf nicht eingegangen bin, aber schön wäre es wenn ich die entsprechende IP-Adresse ermitteln kann. Ich verwende für den Test hier z.B. einen UMTS-Router bei dem ich im DHCP-Mode die IP-Adresse nicht auf die MAC-Adresse bzw. Gerät festlegen kann und auf das verwendete Gateway habe ich keine Einflussmöglichkeit außer die kontinuierlich gesendete Daten entgegenzunehmen.

    Bzgl. ARP-Aufruf bin ich einen winzigen Schritt weiter. Mit folgendem Code kann ich arp aufrufen ohne das dass cmd Fenster kurz erscheint und ich leite die Ausgabe in eine Datei um die ich lesen und weiterverarbeiten kann, was ich aber als etwas unschön empfinde.

    Quellcode

    1. Sub OpenWithStartInfo()
    2. Dim startInfo As New ProcessStartInfo("cmd.exe")
    3. startInfo.WindowStyle = ProcessWindowStyle.Hidden
    4. Process.Start(startInfo)
    5. startInfo.Arguments = "/c arp /a > D:\ip_mac.txt"
    6. Process.Start(startInfo)
    7. End Sub 'OpenWithStartInfo


    Ist es auch möglich die Ausgabe nicht in eine Datei zu schreiben, sondern direkt in eine Programmvariable (z.B. String, Listbox o.ä.) zu übernehmen? Und wie schon angefragt, wenn ich den arp-Befehl (IP mit MAC-Adresse) mit VB selbst nachbilden könnte dann wäre das super.
    - Starte nicht CMD sondern direkt arp
    - Leite den StandardOutput um in einen Stream, den du in deinem Programm auswertest.
    msdn.microsoft.com/en-us/libra…ocess.standardoutput.aspx

    wenn ich den arp-Befehl (IP mit MAC-Adresse) mit VB selbst nachbilden könnte
    Du kannst den WinApi-Aufruf wrappen.
    stackoverflow.com/questions/13…-requests-in-managed-code

    Vielleicht geht auch irgendwas mit WMI.
    Kannst ja mal im System.Management-Namespace suchen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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