Zweite IP-Adresse einer Netzwerkkarte auslesen

  • Moin,

    gibt es eine einfache Möglichkeit die zweite IP-Adresse einer Netzwerkkarte auszulesen? Und gibt es die Möglichkeit per WMI oder anders zu bestimmen, ob die IP-Adresse per DHCP gekommen ist oder ob die fest eingetragen wurde?

    Danke!

  • Nein, kann ich nicht.

    @IPAdress2 liest die IP-Adresse der zweiten Netzwerkkarte aus. Ich benoetige jedoch die zweite IP-Adresse auf einer Netzwerkkarte.

  • Nö, ich kann einer Netzwerkkarte ja mehrere IP-Adressen geben, zum Beispiel aus einem anderen Netzwerkbereich.

  • Ja, das wäre eine Möglichkeit, aber ist mir zu viel gefrickel.

    Wenns geht such ich da was über WMI oder anderes ..

    Jemand eine andere Idee?

  • Vielleicht hilf Dir das folgende Script etwas.
    Es ist natürlich nicht vollständig und ich habe es gerade selbst zusammengestrickt.... Also nichts perfektes

    [autoit]

    Global $oWMIService = ObjGet("Winmgmts:\\.\root\cimv2")
    Global $IPConfigSet = $oWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

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

    For $IPConfig In $IPConfigSet
    For $i = 0 To UBound($IPConfig.IPAddress) - 1
    If $IPConfig.IPAddress($i) <> "" Then ConsoleWrite($IPConfig.IPAddress($i) & @CRLF)
    Next
    Next

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

    $oWMIService = 0

    [/autoit]
  • Also bei mir liefern die Makros @ipaddress 1-4 sowohl unter vista, als auch unter win2k8R2 alle IP Adressen auf, also auch mehrere pro physikalischer Netzwerkkarte. Allerdings liegt die neu hinzugefügte Adresse des 1. Controllers nun auf dem makro @ipaddress3, die Zuordnung erfolgt also vermutlich anhand der Reihenfolge wann die IPs zugewiesen wurden. Evtl würde das nach einem Neustart anders ausschaun. Logischer wäre die Makro Zuordnung jedenfalls nach Controller.

    @ipadress1: 1. IP 1. Controller
    @ipadress2: 1. IP 2. Controller
    @ipadress3: 2. IP 1. Controller

  • Ja, hab nochmal geguckt. Stimmt. Bei mir wird die zweite IP-Adresse auf dem ersten Controller unter @IPAdress4 auch angezeigt. Bringt mir aber nichts.

    veronesi: Kann ich die Daten auch in ein Array gepumpt kriegen?

  • Wie wäre es damit?

    [autoit]

    #include <Array.au3>

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

    Global $oWMIService = ObjGet("Winmgmts:\\.\root\cimv2")
    Global $IPConfigSet = $oWMIService.ExecQuery("Select IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE")

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

    For $IPConfig In $IPConfigSet
    $aIP = $IPConfig.IPAddress()
    _ArrayDisplay($aIP)
    Next
    $oWMIService = 0

    [/autoit]
  • Mit dem folgenden Script solltest Du alle IP-Adressen von allen Adaptern im PC bekommen (Nur wenn aktiviert).
    Zusätzlich auch die MAC Adresse und ob DHCP aktiviert ist und weitere evtl. nützliche Dinge

    [autoit]

    #include <Array.au3>

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

    Global $oWMI = ObjGet("Winmgmts:\\.\root\cimv2")
    Global $oInstances = $oWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE")
    Global $aNetworkAdapter[1], $aIP

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

    For $oInstance In $oInstances
    With $oInstance
    _ArrayAdd($aNetworkAdapter, "Description: " & .Description)
    _ArrayAdd($aNetworkAdapter, "DHCP Enabled: " & .DHCPEnabled)
    _ArrayAdd($aNetworkAdapter, "DHCP Server: " & .DHCPServer)
    _ArrayAdd($aNetworkAdapter, "DNS Domain: " & .DNSDomain)
    _ArrayAdd($aNetworkAdapter, "DNS Hostname: " & .DNSHostName)
    $aIP = .IPAddress
    For $i = 0 To UBound($aIP) - 1
    _ArrayAdd($aNetworkAdapter, "IP Address " & $i + 1 & ": " & $aIP[$i])
    Next
    _ArrayAdd($aNetworkAdapter, "MAC Address: " & .MACAddress)
    _ArrayDelete($aNetworkAdapter, 0)
    _ArrayDisplay($aNetworkAdapter)
    EndWith
    Next
    $oInstance = 0
    $oInstances = 0
    $oWMI = 0

    [/autoit]

    Bitte testen, ob's bei Dir auch wirklich klappt.

    Gruss Veronesi

  • Koennen die Informationen auch in ein 2D-Array gepackt werden? Fuer jeden Adapter einen Bereich?

  • Funktioniert das?

    [autoit]

    #include <Array.au3>

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

    Global $oWMI = ObjGet("Winmgmts:\\.\root\cimv2")
    Global $oInstances = $oWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE")
    Global $aNetworkAdapter[1][7], $aIP, $Row = 0, $Column = 6

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

    For $oInstance In $oInstances
    With $oInstance
    ReDim $aNetworkAdapter[$Row + 1][$Column + 1]
    $aNetworkAdapter[$Row][0] = "Description: " & .Description
    $aNetworkAdapter[$Row][1] = "DHCP Enabled: " & .DHCPEnabled
    $aNetworkAdapter[$Row][2] = "DHCP Server: " & .DHCPServer
    $aNetworkAdapter[$Row][3] = "DNS Domain: " & .DNSDomain
    $aNetworkAdapter[$Row][4] = "DNS Hostname: " & .DNSHostName
    $aNetworkAdapter[$Row][5] = "MAC Address: " & .MACAddress
    $Column = 6

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

    $aIP = .IPAddress
    For $i = 0 To UBound($aIP) - 1
    $aNetworkAdapter[$Row][$Column] = "IP Address " & $i + 1 & ": " & $aIP[$i]
    $Column += 1
    ReDim $aNetworkAdapter[$Row + 1][$Column + 1]
    Next
    $Row += 1
    EndWith
    Next
    $oInstance = 0
    $oInstances = 0
    $oWMI = 0

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

    _ArrayDisplay($aNetworkAdapter)

    [/autoit]

    Edit: Kleiner Fehler beseitigt, welcher Leerzeilen provozierte!

    2 Mal editiert, zuletzt von veronesi (2. August 2011 um 13:00)

  • Kann man das zu einer Funktion zusammen packen, dass diese mir ausgibt in einem Array in einem Feld die ganzen IP-Adressen (IP1: ...., IP2: ....), in einem weiteren Array-Feld die MAcs (MAC 1: ..., MAC2: ....) und das gleiche für den Rest?

    Danke

  • Und wie 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][/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 : IP Address 1
    ; Index 2 : IP Address 2
    ; Index 3 : IP Address 3
    ; Index n : IP Address n
    ; Index n + 1: MAC Address
    ; Index n + 2: DHCP Enabled?
    ; Index n + 3: IP of DHCP Server
    ;
    ; @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 + 1][$Column + 1]

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

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

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

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

    [/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