Netzwerk Adapter Informationen nach Adapthername

  • Hallo,

    ich brauche eine Funktion der man den Ethernet Adapternamen(z.B.: "LAN-Verbindung") übergibt und darüber dann Informationen zurück bekommt.

    Mich interessieren im Grunde alles was "IPconfig /all" ausgibt.

    Code
    Verbindungsspezifisches DNS-Suffix:
    Beschreibung. . . . . . . . . . . :
    Physikalische Adresse . . . . . . :
    DHCP aktiviert. . . . . . . . . . :
    Autokonfiguration aktiviert . . . :
    IPv4-Adresse  . . . . . . . . . . :
    Subnetzmaske  . . . . . . . . . . :
    Standardgateway . . . . . . . . . :
    DNS-Server  . . . . . . . . . . . :
    NetBIOS über TCP/IP . . . . . . . :

    Diese Funktion von veronesi Funktioniert heute noch gut aber liefert leider nicht geügend Infos. Hat jemand von euch eine Idee wie bzw ob man diese dahingehend erweitern kann um alle Infos zu bekommen? Und wie man dieser Funktion den Adapthernamen übergeben kann?

    [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]
  • Meinst du vielleicht soweas hier:


    [autoit]


    $rueckgabe = ""
    $pid = Run("ipconfig /all","",@SW_HIDE,6)
    While 1
    ; Rückgabe auslesen
    If StdOutRead($pid,True) Then $rueckgabe &= StdOutRead($pid)
    If StdErrRead($pid,True) Then $rueckgabe &= StdErrRead($pid)
    ; bei Fehler ist der Process beendet
    If @error Then ExitLoop
    ; und warten, oder wollen wir den Rechner 100% auslasten
    Sleep(100)
    Wend
    Msgbox(0,"",$rueckgabe)

    [/autoit]

    Zuu finden auf [ offen ] Cmd Text auslesen


    Gruss AyKay

  • Da stellt sich mir die Frage, wieso ipconfig /all wenn du nur einen Adapter willst? Welche Infos brauchst du?
    DU könntest zum Beispiel eine "For" Schleife bauen in der du alles in ein Array lädst und dann gibst du nur die gewünschten Arrays aus.

  • Code
    Verbindungsspezifisches DNS-Suffix:
    Beschreibung. . . . . . . . . . . :
    Physikalische Adresse . . . . . . :
    DHCP aktiviert. . . . . . . . . . :
    Autokonfiguration aktiviert . . . :
    IPv4-Adresse  . . . . . . . . . . :
    Subnetzmaske  . . . . . . . . . . :
    Standardgateway . . . . . . . . . :
    DNS-Server  . . . . . . . . . . . :
    NetBIOS über TCP/IP . . . . . . . :

    Diese Infos hätte ich gerne zu den jeweiligen Netzwerk Adapthern.
    Am liebsten eine Funktion der man den Adapthernamen übergibt um die passenden infos zurück zu geben.
    Muss nicht auf Ipconfig /all basieren.

    edit:

    Habe ein Script gefunden das meinen Anforderungen gerecht wird.
    Falls jemand anders Interesse daran hat, ich habe es im Englischen Forum gefunden.
    http://www.autoitscript.com/forum/topic/12…-servers/page-3

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <Array.au3>

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

    Global $aArray = _IPDetails(), $sData
    _ArrayDisplay($aArray)

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

    For $A = 1 To $aArray[0][0]
    $sData &= "Description: " & $aArray[$A][0] & @CRLF & "IP Address: " & $aArray[$A][1] & @CRLF & "MAC: " & $aArray[$A][2] & _
    @CRLF & "Default Gateway: " & $aArray[$A][3] & @CRLF & "DNS Servers: " & $aArray[$A][4] & @CRLF & "Obtain DNS Automatically: " & $aArray[$A][5] & _
    @CRLF & "Auto IP: " & $aArray[$A][6] & @CRLF & @CRLF
    Next
    $sData = StringTrimRight($sData, 4)

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

    MsgBox(0, "_IPDetails()", $sData)

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

    Func _IPDetails()
    Local $iCount = 0
    Local $oWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & "." & "\root\cimv2")
    Local $oColItems = $oWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True", "WQL", 0x30), $aReturn[1][7] = [[0, 7]]
    If IsObj($oColItems) Then
    For $oObjectItem In $oColItems
    $aReturn[0][0] += 1
    $iCount += 1

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

    If $aReturn[0][0] <= $iCount + 1 Then
    ReDim $aReturn[$aReturn[0][0] * 2][$aReturn[0][1]]
    EndIf

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

    $aReturn[$iCount][0] = _IsString($oObjectItem.Description)
    $aReturn[$iCount][1] = _IsString($oObjectItem.IPAddress(0))
    $aReturn[$iCount][2] = _IsString($oObjectItem.MACAddress)
    $aReturn[$iCount][3] = _IsString($oObjectItem.DefaultIPGateway(0))
    $aReturn[$iCount][4] = _WMIArrayToString($oObjectItem.DNSServerSearchOrder(), " - ") ; You could use _ArrayToString() but I like creating my own Functions especially when I don't need alot of error checking.
    $aReturn[$iCount][5] = _WMIRegRead($oObjectItem.SettingID)
    $aReturn[$iCount][6] = _IsString($oObjectItem.DHCPEnabled)
    Next
    ReDim $aReturn[$aReturn[0][0] + 1][$aReturn[0][1]]
    Return $aReturn
    EndIf
    Return SetError(1, 0, $aReturn)
    EndFunc ;==>_IPDetails

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

    Func _WMIRegRead($iGUID)
    If RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & $iGUID & "\", "NameServer") = "" Then
    Return True
    EndIf
    Return False
    EndFunc ;==>_WMIRegRead

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

    Func _IsString($sString)
    If IsString($sString) Or IsBool($sString) Then
    Return $sString
    EndIf
    Return "Not Available"
    EndFunc ;==>_IsString

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

    Func _WMIArrayToString($aArray, $sDelimeter = "|")
    If IsArray($aArray) = 0 Then
    Return SetError(1, 0, "Not Available")
    EndIf
    Local $iUbound = UBound($aArray) - 1, $sString
    For $A = 0 To $iUbound
    $sString &= $aArray[$A] & $sDelimeter
    Next
    Return StringTrimRight($sString, StringLen($sDelimeter))
    EndFunc ;==>_WMIArrayToString

    [/autoit]
  • Probiere es mal damit:

    [autoit]


    #include <Array.au3>
    #include <Constants.au3>

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

    $aResult = ParseIPConfig("Wireless Network Connection") ;hier den Namen des Netzwerkadapters eintragen
    _ArrayDisplay($aResult)

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

    Func ParseIPConfig($sAdaptername, $bAll = True) ;coded by UEZ 2013
    Local $sLines, $sAll = "/all"
    If Not $bAll Then $sAll = ""
    Local $iPID = Run(@ComSpec & " /c ipconfig.exe " & $sAll, @SystemDir, @SW_HIDE, $STDERR_MERGED)
    While True
    $sLines &= StdoutRead($iPID)
    If @error Then ExitLoop
    WEnd
    If Not $sLines Then Return SetError(1, 0, 0)
    Local $i = 1, $a, $aa, $aResult[100][2]
    $a = StringRegExp($sLines, "(?m)" & $sAdaptername & ":\s*(\v.*){0}", 3)
    If @error Then Return SetError(2, 0, 0)
    $aResult[0][0] = StringStripWS($a[0], 7)
    Do
    $a = StringRegExp($sLines, "(?m)" & $sAdaptername & ":\s*(\v.*){" & $i & "}", 3)
    $aa = StringRegExp($a[0], "(?i)\s*(.*\w).*\s*:\s(.*)", 3)
    If @error then ExitLoop
    $aResult[$i][0] = StringStripWS($aa[0], 7)
    $aResult[$i][1] = StringStripWS($aa[1], 7)
    $i += 1
    Until False
    ReDim $aResult[$i][2]
    Return $aResult
    EndFunc

    [/autoit]

    Getested auf WinXP Ger und Win7 US.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (6. August 2013 um 14:12)

  • Hier mal eine komplette Fassung der WMI Variante, Details zu den einzelnen Infos die abgefragt werden können siehe msdn. Bei mir bleibt der Großteil des Arrays aber leer, somit liefert es vermutlich auch nicht mehr Infos als das zusammengekürzte Script aus dem englischen Forum.

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

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

    Global $oMyError = ObjEvent("AutoIt.Error", "oMyError") ; Install a custom error handler
    Global $aNet = getNetworkInfo()
    _ArrayDisplay($aNet)

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

    Func getNetworkInfo($strComputer = '.')
    Local $aReturn[1][61] ; = [["überschrift1","...","...",...]] ; --> http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx
    Local $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE')
    Local $x = 0
    If IsObj($colItems) Then
    For $objItem In $colItems
    $x += 1
    ReDim $aReturn[$x + 1][61]
    $aReturn[$x][0] = $objItem.ArpAlwaysSourceRoute
    $aReturn[$x][1] = $objItem.ArpUseEtherSNAP
    $aReturn[$x][2] = $objItem.Caption
    $aReturn[$x][3] = $objItem.DatabasePath
    $aReturn[$x][4] = $objItem.DeadGWDetectEnabled
    $aReturn[$x][5] = parseSubArrayToString($objItem.DefaultIPGateway)
    $aReturn[$x][6] = $objItem.DefaultTOS
    $aReturn[$x][7] = $objItem.DefaultTTL
    $aReturn[$x][8] = $objItem.Description
    $aReturn[$x][9] = $objItem.DHCPEnabled
    $aReturn[$x][10] = $objItem.DHCPLeaseExpires
    $aReturn[$x][11] = $objItem.DHCPLeaseObtained
    $aReturn[$x][12] = $objItem.DHCPServer
    $aReturn[$x][13] = $objItem.DNSDomain
    $aReturn[$x][14] = parseSubArrayToString($objItem.DNSDomainSuffixSearchOrder)
    $aReturn[$x][15] = $objItem.DNSEnabledForWINSResolution
    $aReturn[$x][16] = $objItem.DNSHostName
    $aReturn[$x][17] = parseSubArrayToString($objItem.DNSServerSearchOrder)
    $aReturn[$x][18] = $objItem.DomainDNSRegistrationEnabled
    $aReturn[$x][19] = $objItem.ForwardBufferMemory
    $aReturn[$x][20] = $objItem.FullDNSRegistrationEnabled
    $aReturn[$x][21] = parseSubArrayToString($objItem.GatewayCostMetric)
    $aReturn[$x][22] = $objItem.IGMPLevel
    $aReturn[$x][23] = $objItem.Index
    $aReturn[$x][24] = $objItem.InterfaceIndex
    $aReturn[$x][25] = parseSubArrayToString($objItem.IPAddress)
    $aReturn[$x][26] = $objItem.IPConnectionMetric
    $aReturn[$x][27] = $objItem.IPEnabled
    $aReturn[$x][28] = $objItem.IPFilterSecurityEnabled
    $aReturn[$x][29] = $objItem.IPPortSecurityEnabled
    $aReturn[$x][30] = parseSubArrayToString($objItem.IPSecPermitIPProtocols)
    $aReturn[$x][31] = parseSubArrayToString($objItem.IPSecPermitTCPPorts)
    $aReturn[$x][32] = parseSubArrayToString($objItem.IPSecPermitUDPPorts)
    $aReturn[$x][33] = parseSubArrayToString($objItem.IPSubnet)
    $aReturn[$x][34] = $objItem.IPUseZeroBroadcast
    $aReturn[$x][35] = $objItem.IPXAddress
    $aReturn[$x][36] = $objItem.IPXEnabled
    $aReturn[$x][37] = parseSubArrayToString($objItem.IPXFrameType)
    $aReturn[$x][38] = $objItem.IPXMediaType
    $aReturn[$x][39] = parseSubArrayToString($objItem.IPXNetworkNumber)
    $aReturn[$x][40] = $objItem.IPXVirtualNetNumber
    $aReturn[$x][41] = $objItem.KeepAliveInterval
    $aReturn[$x][42] = $objItem.KeepAliveTime
    $aReturn[$x][43] = $objItem.MACAddress
    $aReturn[$x][44] = $objItem.MTU
    $aReturn[$x][45] = $objItem.NumForwardPackets
    $aReturn[$x][46] = $objItem.PMTUBHDetectEnabled
    $aReturn[$x][47] = $objItem.PMTUDiscoveryEnabled
    $aReturn[$x][48] = $objItem.ServiceName
    $aReturn[$x][49] = $objItem.SettingID
    $aReturn[$x][50] = $objItem.TcpipNetbiosOptions
    $aReturn[$x][51] = $objItem.TcpMaxConnectRetransmissions
    $aReturn[$x][52] = $objItem.TcpMaxDataRetransmissions
    $aReturn[$x][53] = $objItem.TcpNumConnections
    $aReturn[$x][54] = $objItem.TcpUseRFC1122UrgentPointer
    $aReturn[$x][55] = $objItem.TcpWindowSize
    $aReturn[$x][56] = $objItem.WINSEnableLMHostsLookup
    $aReturn[$x][57] = $objItem.WINSHostLookupFile
    $aReturn[$x][58] = $objItem.WINSPrimaryServer
    $aReturn[$x][59] = $objItem.WINSScopeID
    $aReturn[$x][60] = $objItem.WINSSecondaryServer
    Next
    EndIf
    Return $aReturn
    EndFunc

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

    Func parseSubArrayToString($aSub, $del=";")
    Local $sResult = ""
    If IsArray($aSub) Then
    For $i = 0 to UBound($aSub)-1
    $sResult &= $aSub[$i] & ";"
    Next
    $sResult = StringTrimRight($sResult,1)
    Else
    ConsoleWrite("error: no object!" & @CRLF)
    Return "ERROR"
    EndIf
    Return $sResult
    EndFunc

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

    Func oMyError()
    Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.Description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.WinDescription & @CRLF & _
    "err.number is: " & @TAB & Hex($oMyError.Number, 8) & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.LastDllError & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.Scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.Source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.Helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.HelpContext _
    )
    EndFunc

    [/autoit]
  • Die WMI Lösung gefällt mir schon ganz gut. Bei der Lösung von UEZ fehlen mir leider ein paar Informationen.

    Ich füge mal ein Bild an welche Informationen mein Programm ausgeben soll.
    An diese WMI funktion sollte man dann den selbst änderbaren Adapthernamen(z.B.: LAN-Adapther) übergeben können.