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!
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!
Also mindestens mal zur ersten Frage kannst Du
[autoit]@IPAddress2
[/autoit]verwenden.
Nein, kann ich nicht.
@IPAdress2 liest die IP-Adresse der zweiten Netzwerkkarte aus. Ich benoetige jedoch die zweite IP-Adresse auf einer Netzwerkkarte.
In dem Fall hast Du eine Netzwerkarte mit mehreren RJ45 Buchsen??
Dann weiss ich auch nicht weiter.
Nö, ich kann einer Netzwerkkarte ja mehrere IP-Adressen geben, zum Beispiel aus einem anderen Netzwerkbereich.
Hast Du schon mal ein ipconfig /all probiert?
Das kannst Du ja über den StdoutRead einlesen.
Vielleicht sind dort alle Adressen und auch DHCP sichtbar!
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
Global $oWMIService = ObjGet("Winmgmts:\\.\root\cimv2")
Global $IPConfigSet = $oWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For $IPConfig In $IPConfigSet
For $i = 0 To UBound($IPConfig.IPAddress) - 1
If $IPConfig.IPAddress($i) <> "" Then ConsoleWrite($IPConfig.IPAddress($i) & @CRLF)
Next
Next
$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")
For $IPConfig In $IPConfigSet
$aIP = $IPConfig.IPAddress()
_ArrayDisplay($aIP)
Next
$oWMIService = 0
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
#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
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
Bitte testen, ob's bei Dir auch wirklich klappt.
Gruss Veronesi
Ah, alles klar.
Damit funktionierts.
Danke
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
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
$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
_ArrayDisplay($aNetworkAdapter)
[/autoit]Edit: Kleiner Fehler beseitigt, welcher Leerzeilen provozierte!
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
Dann würde das aber ein Dreidimmensionales Array ergeben.
Oder wie willst Du die Daten dargestellt haben?
Mach doch mal eine Skizze in Excel und poste das mal!
Siehe Anhang.
Vielleicht wäre es besser, einen Parameter einzuführen, mit welchem man bestimmen kann, ob man die IP-Adressen, oder die MAC Adressen, oder.... haben möchte!
Ich brauch die Daten um die in einer SQL-Datenbank abzuspeichern, also einfach die passende MAC-Adresse zur IP-Adresse, DHCPd aktiv und so .. ...
So will ich das: http://www.abload.de/image.php?img=…mappe1_vdl4.png
Und wie funktioniert das?
#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)
;==================================================================================
; 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):
;==================================================================================
#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
For $oInstance In $oInstances
With $oInstance
ReDim $aNetworkAdapter[$Row + 1][$Column + 1]
$aNetworkAdapter[$Row][$Column] = .Description
$Row += 1
ReDim $aNetworkAdapter[$Row + 1][$Column + 1]
$aIP = .IPAddress
For $i = 0 To UBound($aIP) - 1
$aNetworkAdapter[$Row][$Column] = $aIP[$i]
$Row += 1
ReDim $aNetworkAdapter[$Row + 1][$Column + 1]
Next
ReDim $aNetworkAdapter[$Row + 3][$Column + 1]
$aNetworkAdapter[$Row][$Column] = .MACAddress
$aNetworkAdapter[$Row + 1][$Column] = .DHCPEnabled
$aNetworkAdapter[$Row + 2][$Column] = .DHCPServer
$Column += 1
EndWith
Next
$oInstance = 0
$oInstances = 0
$oWMI = 0
Return SetError(0, $Column, $aNetworkAdapter)
EndFunc ;==>_GetNetworkInformations
Gruss, Veronesi