Netzwerk-Adapternamen aus DOS-Box auslesen? oder besser anders ?

  • moinsen, ich versuche krampfhaft einen ansatz für mein programm zu finden, habe aber keine ahnung wie ich es anstellen soll.
    also, ich muss bisher von hand schauen welchen netzwerk-adapternamen welchen netzwerken zugeordnet sind und diese dann in die registrerung schreiben. ich versuche das zu automatisieren. evtl gitbs ja eine bessere möglichkeit, aber bislang tippe ich immer in die cmd "ipconfig" und bekomme
    dann die netzerkadapterNAMEN(!) und IPs raus. ich muss die namen dann in die registrierung schreiben, was kein problem dastellen sollte für autoIT.
    z.B. in der DOS-box steht dann:

    wie geschrieben muss das programm erkennen, dass wenn die IP mit "7." anfängt, es sich um eine Tunngle-IP handelt und dann anfängt der Adaptername "LAN-Verbindung 5" lautet. - dieser name wird dann in die registrierung geschrieben. ich hoffe das ist verständlich... evtl gibt es auch eine andere möglichkeit die adapternamen auszulesen und zusortieren... ich kenne keine und weiss auch nicht wirklich wie ich das anstellen soll bzw bin mit der suche auf nix passendes gefunden...

    Danke schonmal für die hilfe.

    2 Mal editiert, zuletzt von WhiteLion (2. November 2009 um 20:19)

  • Hi,

    hier die WMI Abfrage für die Netzwerkadapter.
    Du brauchst dann nur noch die IP Adressen abfragen und dementsprechend die Einträge in die registry vornehmen:

    [autoit]

    #include <array.au3> ; wird nur für _ArrayDisplay benötigt
    Global $networkadapter [1] [2]
    _GetNetworkadapter()
    _ArrayDisplay ($networkadapter)

    [/autoit][autoit][/autoit][autoit]

    ;Auslesen der Netzwerkadapter:
    ; Beschreibung
    ; Erste IP Adresse
    Func _GetNetworkadapter ()
    $x = 0
    $strComputer = "Localhost"
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colComputers = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    For $objItem In $colItems
    $networkadapter [$x] [0] = $objitem.Description
    $networkadapter [$x] [1] = $objitem.IPAddress(0)
    $x += 1
    Redim $networkadapter [$x + 1] [2]
    Next
    EndFunc

    [/autoit]

    ;-))
    Stefan

  • Dein ipconfig ist anscheinend neuer als meines, es hat leicht andere Ausgaben, aber vllt hilft dir auch das weiter.

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $PID = Run(@ComSpec & ' /c ipconfig /all |find "Ethernet-Adapter"', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $Name
    While 1
    $Name &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Local $PID = Run(@ComSpec & ' /c ipconfig /all |find "Drahtlos-LAN-Adapter"', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While 1
    $Name &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Local $PID = Run(@ComSpec & ' /c ipconfig /all |find "IP-Adresse"', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $IP
    While 1
    $IP &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    $Name = StringReplace($Name, @CRLF, "")
    $IP = StringReplace($IP, @CRLF, "")

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "STDOUT read:", $Name)
    MsgBox(0, "STDOUT read:", $IP)

    [/autoit]
  • aha danke :) das sieht sehr professionell aus ... zugegeben ich habe weder mit arrays erfahrung noch mit winmgmts :)
    aber mit ist aufgefallen, dass hier nicht die wirklichen verbindungsnamen gelistet werden... zumindest kommt was anderes als bei ipconfig raus wo der Verbindungsname von z.B. Hamachi auch "Hamachi" ist und nicht wie es der Name des Adapters = der Name der Verbindung ist ... ich glaube dein tool zieht die infos aus der registrierung/TCP-adapter, richtig !? so ganz verstehen tue ich das mit der benennung der Verbindungsnamen auch noch nicht, da diese Virtuellen Adapter im endeffekt ja nicht wirklich ihren ursprünglichen namen tragen sondern den, den man im durch ipconfig ablesen kann... ich hoffe du verstehst was ich meine.
    also ich benötige die Verbindungsnamen die ich dann in de registrierung schreiben muss... hast du eine idee wo/wie ich die auslesen kann !? sorry, hatte ich mich wohl blöd ausgedrückt :(


    das verstehe ich ... fast jedenfalls :)

    allerdings weiss ich nicht genau wie ich mit dem findbefehl eine zuordnung zwischen dem Verbindungsnamen und der IP herstellen kann.
    evtl hast du noch eine idee ? :)

  • Hi,

    das sollte jetzt passen:

    [autoit]

    #include <array.au3> ; wird nur für _ArrayDisplay benötigt
    Global $networkadapter [1] [3]
    _GetNetworkadapter()
    _ArrayDisplay ($networkadapter)

    [/autoit][autoit][/autoit][autoit]

    ;Auslesen der Netzwerkadapter:
    ; Selbstbestimmter Name
    ; int. Beschreibung
    ; IP Adresse
    Func _GetNetworkadapter ()
    $x = 0
    $strComputer = "Localhost"
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colComputers = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")
    For $objItem In $colItems
    $networkadapter [$x] [0] = $objitem.Name
    $networkadapter [$x] [1] = $objitem.NetConnectionID
    $x += 1
    Redim $networkadapter [$x + 1] [3]
    Next
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colComputers = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    For $objItem In $colItems
    For $i = 0 To UBound ($networkadapter) - 1
    If $networkadapter [$i] [0] = $objitem.Description Then
    $networkadapter [$i] [2] = $objitem.IPAddress(0)
    EndIf
    Next
    Next
    EndFunc

    [/autoit]

    ;-))
    Stefan