_GetAllNetworkAdapter()

    • Offizieller Beitrag

    Hi,
    in ähnlicher Form hatte ich das schon mal. Hier werden alle Adapter, so wie sie auch unter <Systemsteuerung> <Netzwerkverbindungen> aufgelistet sind ermittelt, inklusive der derzeitigen Konfiguration. Die Rückgabewerte sind aus dem Funktionskopf ersichtlich.

    _GetAllNetworkAdapter
    [autoit]

    #include<Array.au3>
    $ar = _GetAllNetworkAdapter()
    _ArrayDisplay($ar)

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

    ;===============================================================================
    ; Function Name: _GetAllNetworkAdapter()
    ; Description:: Auslesen aller vorhandenen Netzwerkadapter und deren Konfiguration
    ; Parameter(s): keine
    ; Requirement(s): keine
    ; Return Value(s): Erfolg Array[n][0] Adapter Name (wie in Systemsteuerung ==> Netzwerkverbindungen)
    ; Array[n][1] Adapter Beschreibung
    ; Array[n][2] IP-Adresse
    ; Array[n][3] SubNetMask
    ; Array[n][4] DHCP-Enabled (0/1)
    ; Array[n][5] DHCP IP-Adresse
    ; Array[n][6] DHCP SubNetMask
    ; Array[n][7] DHCP Default Gateway
    ; Array[n][8] DHCP Server
    ; Fehler Array[0][0] Leerstring (kein Adapter vorhanden)
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GetAllNetworkAdapter()
    Local $arOut[1][9] = [['']], $arrSubKeys, $arrSubKeys2, $strValue, $sub, $sub2, $sub3, $val
    Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    $oReg.EnumKey (0x80000002, "SYSTEM\CurrentControlSet\Control\Network", $arrSubKeys)
    For $sub In $arrSubKeys
    If RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Network\' & $sub, 'Class') = 'Net' Then ExitLoop
    Next
    $oReg.EnumKey (0x80000002, "SYSTEM\CurrentControlSet\Control\Network\" & $sub, $arrSubKeys)
    $oReg.EnumKey (0x80000002, "SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}", $arrSubKeys2)
    If IsArray($arrSubKeys) Then
    For $sub2 In $arrSubKeys
    $val = RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Network\' & $sub & '\' & $sub2 & '\' & 'Connection', 'Name')
    If Not @error Then
    If $arOut[UBound($arOut)-1][0] <> '' Then ReDim $arOut[UBound($arOut)+1][9]
    $arOut[UBound($arOut)-1][0] = $val
    For $sub3 In $arrSubKeys2
    If RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $sub3, 'NetCfgInstanceId') = $sub2 Then
    $arOut[UBound($arOut)-1][1] = _
    RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $sub3, 'DriverDesc')
    ExitLoop
    EndIf
    Next
    $arOut[UBound($arOut)-1][2] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $sub2 & '\Parameters\Tcpip', 'IPAddress')
    $arOut[UBound($arOut)-1][3] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $sub2 & '\Parameters\Tcpip', 'SubnetMask')
    $arOut[UBound($arOut)-1][4] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $sub2 & '\Parameters\Tcpip', 'EnableDHCP')
    $arOut[UBound($arOut)-1][5] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $sub2 & '\Parameters\Tcpip', 'DhcpIPAddress')
    $arOut[UBound($arOut)-1][6] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $sub2 & '\Parameters\Tcpip', 'DhcpSubnetMask')
    $arOut[UBound($arOut)-1][7] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $sub2 & '\Parameters\Tcpip', 'DhcpDefaultGateway')
    $arOut[UBound($arOut)-1][8] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $sub2 & '\Parameters\Tcpip', 'DhcpServer')
    EndIf
    Next
    EndIf
    Return $arOut
    EndFunc ;==>_GetAllNetworkAdapter

    [/autoit]

    Edit: Im Download ist der Funktionskopf falsch mit den Arrayangaben. Hier im Post habe ich es korrigiert

  • Hi ich habae ein Programm geschrieben was so was ähnliches macht. Nennt sich Nic Info, habe ich aber nie hier veröffentlicht, weil ein Administration und Pflege etwas naja bescheiden ist. Zu meiner Verteidigung, es war aus meiner Anfangszeit bei Autoit. :D

    Ich beschreibe das Tool aber trotzdem mal.
    Also mann kann remote die Einstellungen der Rechner (Netzwerkkarten) abfragen.

    - Name der Kart
    - Anzahl der Netzwerkkarten
    - Welche Netzwerkkarte aktiv ist
    - Medientyp ( z.B. Autoneg oder 100MB Full Duplex)
    - usw.

    Leider gibt es keine Norm, wie die Kartenhersteller dies in der Registry eintragen. :cursing:
    Somit muss jeder Typ der Netzwerkkarte eingepflegt werden.
    Wenn Interesse an dem letzten Punkt besteht könnte man diesen nochmal genauer beschreiben.

    Ja BugFix wir sollten uns zusammentun und mein Nicinfo mal überarbeiten und deinen Quellcode mit einfügen.

    Oder du gibst mir die Erlaubnis deinen Quelltext zu verwenden.

    MfG
    Der_Doc

    • Offizieller Beitrag

    Ja BugFix wir sollten uns zusammentun und mein Nicinfo mal überarbeiten und deinen Quellcode mit einfügen.

    Oder du gibst mir die Erlaubnis deinen Quelltext zu verwenden.

    Ist mir beides Recht. Vielleicht hast du die Möglichkeit bei vieeeelen Produkten (hab nur 2 Adapter ;( ) zu testen ob evtl. einheitlich über WMI abgefragt werden kann. WMI hatte ich hier: Konfiguration Netzwerkadapter verwendet.

  • Ich habe so ca. 100 Opfer bei denen ich testen kann ohne das sie es merken. ;)
    Nennt sich Firmennetzwerk .... und ich kenne den Netzwerkadmin :thumbup:

    Ich habe das nicht über WMI gemacht, weil die Daten der Netzwerkadapter nur in der Registry unter dem Schlüssel stehen wo du auch die Adresse herbekommen hast.
    ich werde bei Gelegenheit nochmal schauen ob ich da net nochmal was umbauen kann. Aber einer Zusammenarbeit steht nix im Weg. ;)

    MfG
    Der_Doc

  • Ich weiß ist schon ein älterer Thread aber bei mir hat die Funktion auf einem PC nicht richtig funktioniert, daher hab ich es mal in folgender Form neugeschrieben:

    Spoiler anzeigen
    [autoit]


    #include<Array.au3>
    ;######################################################################################################
    ;# Function Name: _GetAllNetAdapterInfo()
    ;# Description:: Auslesen aller vorhandenen Netzwerkadapter und deren Konfiguration
    ;# Parameter(s): keine
    ;# Requirement(s): keine
    ;# Return Value(s): Erfolg Array[0][0] Anzahl der Adapter
    ;# Array[n][0] Adapter Name (wie in Systemsteuerung ==> Netzwerkverbindungen)
    ;# Array[n][1] Adapter Beschreibung
    ;# Array[n][2] IP-Adresse
    ;# Array[n][3] SubNetMask
    ;# Array[n][4] DHCP-Enabled (0/1)
    ;# Array[n][5] DHCP IP-Adresse
    ;# Array[n][6] DHCP SubNetMask
    ;# Array[n][7] DHCP Default Gateway
    ;# Array[n][8] DHCP Server
    ;# Fehler Array[0][0] Leerstring (kein Adapter vorhanden)
    ;# Author(s): Bitboy, nach einer Idee von BugFix ([email='bugfix@autoit.de'][/email])
    ;######################################################################################################
    Func _GetAllNetAdapterInfo ()
    Local $infoarr[1][9], $keyarr[1], $i=0, $x=0, $counter=0, $tmp, $tmp2, $short

    ;Registrierte Adapter zählen
    While 1
    $i = $i + 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services", $i)
    If @error <> 0 then ExitLoop

    ;Adapter sind in den einzigen Schlüsseln die mit "{" beginnen
    If StringInStr($tmp,"{") Then
    $short = 1 ;Merker zum Verkürzen der Schleife da Keys alphabetisch sortiert
    $counter = $counter + 1
    Redim $keyarr[$counter+1]
    $keyarr[$counter] = $tmp ;Speichern der Adapterschlüssel
    $keyarr[0] = $counter
    Else
    If $short = 1 Then ExitLoop
    EndIf
    WEnd

    ;Funktion verlassen wenn kein Adapter gefunden wurde
    If $counter = 0 Then
    $infoarr[0][0] = 0
    Return $infoarr
    EndIf

    ;Rückgabearray an Adapterzahl anpassen
    Redim $infoarr[$counter+1][9]
    $infoarr[0][0] = $counter

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

    ; TCP-Informationen auslesen
    For $i = 1 to $counter
    $infoarr[$i][2] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'IPAddress')
    $infoarr[$i][3] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'SubnetMask')
    $infoarr[$i][4] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'EnableDHCP')
    $infoarr[$i][5] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpIPAddress')
    $infoarr[$i][6] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpSubnetMask')
    $infoarr[$i][7] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpDefaultGateway')
    $infoarr[$i][8] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpServer')
    Next

    ;Adapternamen auslesen
    $i = 1
    $short = 0
    While 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}",$i)
    If @error <> 0 then ExitLoop

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

    $tmp2 = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "NetCfgInstanceId")
    For $x = 1 To $counter

    ;Zugeordnete Verbindung auslesen
    $infoarr[$x][1] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\' & $keyarr[$x] & '\Connection', 'Name')

    If $tmp2 = $keyarr[$x] Then
    $infoarr[$x][0] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "DriverDesc")
    $short = $short +1 ;gefundene Namen zählen
    EndIf
    Next

    If $short = $counter Then ExitLoop ;Alle Adapternamen gefunden

    $i = $i +1
    WEnd

    Return $infoarr
    EndFunc

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

    $test = _GetAllNetAdapterInfo()
    _ArrayDisplay($test)

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

    Exit

    [/autoit]

    Kritik und Verbesserungsvorschläge erwünscht ;)

  • Verbesserungsvorschläge, gerne:

    Habe den Script gerade einmal gestartet und mir ist aufegfallen das auch Netzwerkadapter gelistet werden, die garnicht mehr physikailsch vorhanden sind!
    Habe hier einen Computer wo ich mal eine Karte ausgebaut habe, ohne diese vorher zu deinstalieren. Ich weiß nicht ob es gewünscht ist das diese Adapter auch noch mit aufgelistet werden.

    • Offizieller Beitrag

    aber bei mir hat die Funktion auf einem PC nicht richtig funktioniert, daher hab ich es mal in folgender Form neugeschrieben:


    Da du keine konkrete Aussage triffst, WAS nicht funktioniert hat, kann ich dir auch nicht sagen, woran es liegt.
    Die von dir verwendete Skriptvariante, prüft identisch ab, was auch in meiner Version passiert. Nur dass es bei dir aufwändiger ist. :D

  • n der Ausgabe des Array`s habe ich auch Interfaces aufgelistet, die Hardwaremäßig nicht mehr vorhanden sind.

    (Diese sind nur von der Hardware Seite entfernt worden. Sie wurden vorher nicht deinstaliert!)

    Das sollte auch nur ein Hinweis sein, kein konkreter Fehler! ;)