Zweite IP-Adresse einer Netzwerkkarte auslesen

  • Funktionieren tut das ja, ich meinte aber ob man das evtl. so ansprechen kann

    $array[1][1] $array[2][1]
    $array[1][2] $array[2][2]
    $array[1][3] $array[2][3]
    $... $...

    Gruß

  • Wie wäre denn der Aufruf wenn ich aus deiner Funktion Name, IP, MAC rausholen will? Welche Felder müsst ich da anhauen?

  • Das ist doch ganz einfach!
    Ich habe die Funktion nochmals etwas umgeschrieben, damit die IP-Adressen zuletzt im Array erscheinen.
    Dies deshalb, weil man nicht weiss, wieviele IP-Adressen vergeben wurden!!

    Hier die neue Funktion.
    Bei den MsgBox'es am Anfang, kannst Du schön erkennen, wie man die einzelnen Arrayelemente anspricht.

    [autoit]

    $array[Zeilenummer][Spaltennummer]

    [/autoit]

    Im Kommentar meiner Funktion siehst Du, in welcher Zeilen/Spaltenkombination welche Information steht!

    _GetNetworkInformations
    [autoit]

    #include <Array.au3>

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

    Global $Info = _GetNetworkInformations()
    Global $NumberOfAdapters = @extended
    Global $sTitle = "Index "
    For $i = 1 To $NumberOfAdapters
    $sTitle &= "| Adapter " & $i
    Next
    _ArrayDisplay($Info, "Network Informations", -1, 0, "", "", $sTitle)

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

    For $Adapter = 0 To UBound($Info, 2) - 1
    MsgBox(64, "Beschreibung von Adapter " & $Adapter + 1, $Info[0][0])
    MsgBox(64, "MAC von Adapter " & $Adapter + 1, $Info[1][0])
    MsgBox(64, "DHCP von Adapter " & $Adapter + 1, $Info[2][0])
    MsgBox(64, "IP (DHCP) von Adapter " & $Adapter + 1, $Info[3][0])
    For $i = 4 To UBound($Info) - 1
    MsgBox(64, "IP " & $i -3 & " von Adapter " & $Adapter + 1, $Info[4][0])
    Next
    Next

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

    ;==================================================================================
    ; Function: _GetNetworkInformations()
    ; Description: Returns an array with some informations about all network cards
    ; Parameter(s): -
    ;
    ; Return Value(s): On Success: Return Array
    ; Column 0 Column 1 Column 2...
    ; Index 0 : Network Card Description
    ; Index 1 : MAC Address
    ; Index 2 : DHCP Enabled?
    ; Index 3 : IP of DHCP Server
    ; Index 4 : IP-Address 1
    ; Index 5 : IP-Address 2
    ; Index n : IP-Address n
    ;
    ; @Extended = Number of Adapters found
    ;
    ; On Failure: Sets @ERROR to none zero
    ; Author(s): Veronesi
    ; Note(s):
    ;==================================================================================

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

    #include-once

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

    Func _GetNetworkInformations()

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

    Local $oWMI = ObjGet("Winmgmts:\\.\root\cimv2")
    If Not IsObj($oWMI) Or @error Then Return SetError(1, 1, 0)
    Local $oInstances = $oWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE")
    Local $aNetworkAdapter[1][1], $aIP, $Row = 0, $Column = 0

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

    For $oInstance In $oInstances
    With $oInstance
    ReDim $aNetworkAdapter[$Row + 1][$Column + 1]
    $aNetworkAdapter[$Row][$Column] = .Description
    $Row += 1
    ReDim $aNetworkAdapter[$Row + 3][$Column + 1]

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

    $aNetworkAdapter[$Row][$Column] = .MACAddress
    $aNetworkAdapter[$Row + 1][$Column] = .DHCPEnabled
    $aNetworkAdapter[$Row + 2][$Column] = .DHCPServer

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

    $Row += 3
    $aIP = .IPAddress
    For $i = 0 To UBound($aIP) - 1
    ReDim $aNetworkAdapter[$Row + 1][$Column + 1]
    $aNetworkAdapter[$Row][$Column] = $aIP[$i]
    $Row += 1
    Next

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

    $Column += 1
    EndWith
    Next
    $oInstance = 0
    $oInstances = 0
    $oWMI = 0
    Return SetError(0, $Column, $aNetworkAdapter)
    EndFunc ;==>_GetNetworkInformations

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

    Gruss Veronesi

  • Bei mir haut er aus deinem Beispiel immer nur die erste Netzwerkkarte raus .. Und nicht alle, ist da noch was falsch? *g*

  • Am Anfang wird ja das Array (mit _ArrayDisplay) angezeigt.
    Ändere diese Zeile mal in

    [autoit]

    _ArrayDisplay($Info)

    [/autoit]


    Damit sicher keine Zeile bei der Anzeige abgeschnitten wird.

    Zeigt er dann dort alle Netzwerkkarten an, oder nicht?
    Wenn nicht, dann muss es irgendwo an der Funktion liegen. Aber ich habe keine Ahnung wie man mit WMI die anderen Netzwerkkarten auch noch ansprechen könnte.
    Ich meinte, dass er so alle bringen sollte....

  • Doch Doch, im Array zeigt er alle Netzwerkkarten an, nur später wenn er die MsgBox'n durchläuft, zeigt er immer nur den einen Adapter an ...

  • Naja, das kommt davon, wenn man es nicht richtig testet.
    Da waren noch einige Fehler drinnen.

    Nun die neue Version.
    Funktioniert das?????

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global $Info = _GetNetworkInformations()
    Global $NumberOfAdapters = @extended
    Global $sTitle = "Index "
    For $i = 1 To $NumberOfAdapters
    $sTitle &= "| Adapter " & $i
    Next
    _ArrayDisplay($Info, "Network Informations", -1, 0, "", "", $sTitle)

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

    For $Adapter = 0 To UBound($Info, 2) - 2
    MsgBox(64, "Beschreibung von Adapter " & $Adapter + 1, $Info[1][$Adapter])
    MsgBox(64, "MAC von Adapter " & $Adapter + 1, $Info[2][$Adapter])
    MsgBox(64, "DHCP von Adapter " & $Adapter + 1, $Info[3][$Adapter])
    MsgBox(64, "IP (DHCP) von Adapter " & $Adapter + 1, $Info[4][$Adapter])
    For $i = 5 To $Info[0][$Adapter]
    MsgBox(64, "IP " & $i - 4 & " von Adapter " & $Adapter + 1, $Info[$i][$Adapter])
    Next
    Next

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

    ;==================================================================================
    ; Function: _GetNetworkInformations()
    ; Description: Returns an array with some informations about all network cards
    ; Parameter(s): -
    ;
    ; Return Value(s): On Success: Return Array
    ; Column 0 Column 1 Column 2...
    ; Index 0 : Number of Indexes in this column
    ; Index 1 : Network Card Description
    ; Index 2 : MAC Address
    ; Index 3 : DHCP Enabled?
    ; Index 4 : IP of DHCP Server
    ; Index 5 : IP-Address 1
    ; Index 6 : IP-Address 2
    ; Index n : IP-Address n
    ;
    ; @Extended = Number of Adapters found
    ;
    ; On Failure: Sets @ERROR to none zero
    ; Author(s): Veronesi
    ; Note(s):
    ;==================================================================================

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

    #include-once

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

    Func _GetNetworkInformations()

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

    Local $oWMI = ObjGet("Winmgmts:\\.\root\cimv2")
    If Not IsObj($oWMI) Or @error Then Return SetError(1, 1, 0)
    Local $oInstances = $oWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE")
    Local $aNetworkAdapter[1][1], $aIP, $Row = 1, $Column = 0, $MaxRow = 0

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

    For $oInstance In $oInstances
    With $oInstance
    $Row = 1
    ReDim $aNetworkAdapter[100][$Column + 1]
    $aNetworkAdapter[$Row][$Column] = .Description
    $Row += 1
    ReDim $aNetworkAdapter[100][$Column + 1]

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

    $aNetworkAdapter[$Row][$Column] = .MACAddress
    $aNetworkAdapter[$Row + 1][$Column] = .DHCPEnabled
    $aNetworkAdapter[$Row + 2][$Column] = .DHCPServer

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

    $Row += 3
    $aIP = .IPAddress
    For $i = 0 To UBound($aIP) - 1
    ReDim $aNetworkAdapter[100][$Column + 1]
    $aNetworkAdapter[$Row][$Column] = $aIP[$i]
    $Row += 1
    Next

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

    If $MaxRow < $Row Then $MaxRow = $Row
    $aNetworkAdapter[0][$Column] = $Row - 1
    $Column += 1
    EndWith
    Next
    ReDim $aNetworkAdapter[$MaxRow][$Column + 1]
    $oInstance = 0
    $oInstances = 0
    $oWMI = 0
    Return SetError(0, $Column, $aNetworkAdapter)
    EndFunc ;==>_GetNetworkInformations

    [/autoit]

    Gruss Veronesi