WLan IP Adresse ausgeben

  • Hallo Gemeinde, nun benötige ich schon wieder eure Hilfe!

    Ich habe es in meinem letzten Beitrag angemeldet, ich werde wieder kommen und Fragen stellen die jemand hoffentlich beantworten wird.

    Nun wir setzen einen Einzeiler ein, dieser zeigt die wichtigsten Infos an:

    [autoit]


    MsgBox(0,"System Information", "Machine Name is " & @ComputerName & @CRLF & @CRLF & "User Name is " & @UserName & @CRLF & @CRLF & "Local IP is " & @IPAddress1 & @CRLF & @CRLF & "VPN IP is " & @IPAddress2 & @CRLF & @CRLF & "Click OK when finished.")

    [/autoit]

    Nun würden wir auch gerne die IP Adresse des WLan Adapters mit einbauen.
    Leider habe ich noch nichts gefunden.
    Vieleicht bin ich auch nur blind, und ich seh die Lösung nur nciht
    In diesem Sinne vielen Dank für eure Hilfe.

    Gruß
    Manfred

    Ja, ich weiß es auch, das Problem ist einen halben Meter vor dem Bildschirm. 8o

    Einmal editiert, zuletzt von Mr-Ferret (24. Mai 2013 um 14:22)

  • Wo liegt denn der Unterschied zwischen der "lokalen IP Adresse" und der "IP Adresse des WLan Adapters"? In meinem Fall ist @IPAdress1 die Adresse meines Wlan Adapters (192.168.178.2).
    Ich glaube zwar nicht, dass du danach suchst, aber mit _GetIP() lässt sich die öffentliche IP (also die Adresse deines Routers/Modems) auslesen.

  • Hier mal eine WMI Abfrage, die dir absolut alle Informationen über die aktuell in Verwendung befindlichen Netzwerkadapter liefern dürfte. Prinzipiell gibt es keinen Unterschied zwischen WLAN Adaptern und "normalen" LAN Adaptern, wie name22 schon sagte. Aber anhand des Gerätenamens dürfte man das durchaus unterscheiden können. Da bei dir vermutlich wie bei mir etliche Felder des Arrays leer sein und dich ohnehin nicht interessieren dürften solltest du das Array bzw. die enthaltenen Abfragen auf das wesentliche Reduzieren.

    Siehe auch: http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx

    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]

    Einmal editiert, zuletzt von misterspeed (24. Mai 2013 um 10:41)

  • Etwas umständlich aber somit kann man sicher sein das man nur entweder WLAN oder Ethernet-Geräte zurückbekommt:

    Spoiler anzeigen
    [autoit]

    Global Const $tagIP_ADAPTER_INFO = "ptr Next;" & _
    "DWORD ComboIndex;" & _
    "char AdapterName[260];" & _
    "char Description[132];" & _
    "UINT AddressLength;" & _
    "BYTE Address[8];" & _
    "DWORD Index;" & _
    "UINT Type;" & _
    "UINT DhcpEnabled;" & _
    "ptr CurrentIpAddress;" & _
    "ptr IpAddressListNext;" & _
    "char IpAddressListADDRESS[16];" & _
    "char IpAddressListMASK[16];" & _
    "DWORD IpAddressListContext;" & _
    "ptr GatewayListNext;" & _
    "char GatewayListADDRESS[16];" & _
    "char GatewayListMASK[16];" & _
    "DWORD GatewayListContext;" & _
    "ptr DhcpServerNext;" & _
    "char DhcpServerADDRESS[16];" & _
    "char DhcpServerMASK[16];" & _
    "DWORD DhcpServerContext;" & _
    "BOOL HaveWins;" & _
    "ptr PrimaryWinsServerNext;" & _
    "char PrimaryWinsServerADDRESS[16];" & _
    "char PrimaryWinsServerMASK[16];" & _
    "DWORD PrimaryWinsServerContext;" & _
    "ptr SecondaryWinsServerNext;" & _
    "char SecondaryWinsServerADDRESS[16];" & _
    "char SecondaryWinsServerMASK[16];" & _
    "DWORD SecondaryWinsServerContext;" & _
    "DWORD LeaseObtained; DWORD LeaseExpires;"

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

    Global $o_WMI = ObjGet("winmgmts:\\localhost\root\CIMV2")

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

    For $s_Mac In getMACsOfNetDevices(71)
    For $x In $o_WMI.ExecQuery("SELECT * FROM Win32_NetworkAdapter " & _
    "WHERE ((MACAddress = '" & $s_Mac & "') AND (Manufacturer <> 'Microsoft'))", "WQL", 0x10 + 0x20)
    For $j In $o_WMI.ExecQuery("Associators Of {Win32_NetworkAdapter.DeviceID=" & $x.DeviceID & "} WHERE ResultClass=Win32_NetworkAdapterConfiguration")
    MsgBox(0, "", "Name: " & $x.name & @CRLF & _
    "Hersteller: " & $x.Manufacturer & @CRLF & _
    "Mac-Adresse: " & $x.MACAddress & @CRLF & _
    "IP-Adresse: " & $j.IPAddress(0))
    Next
    Next
    Next

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

    Func getMACsOfNetDevices($d_Type=6) ; $d_Type: 71=Wlan, 6=Ethernet
    ;by AspirinJunkie
    Local $a_Ret, $s_Ret = "", $buf_AdapterInfo, $p_AdapterInfo, $strct_AdapterInfo
    Local $h_dll = DllOpen("Iphlpapi.dll")

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

    $a_Ret = DllCall($h_dll, "DWORD", "GetAdaptersInfo", "ptr", 0, "ULONG*", 0) ; 1. Call um ulOutBufLen zu bestimmen
    $buf_AdapterInfo = DllStructCreate("BYTE[" & $a_Ret[2] & "]")
    $p_AdapterInfo = DllStructGetPtr($buf_AdapterInfo)

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

    DllCall($h_dll, "DWORD", "GetAdaptersInfo", "ptr", $p_AdapterInfo, "ULONG*", $a_Ret[2]) ; 2. Call welcher nun den 1. Adapter zurück gibt
    $strct_AdapterInfo = DllStructCreate($tagIP_ADAPTER_INFO, $p_AdapterInfo)

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

    If Not @error Then
    Do
    ; Prüfe ob Adapter ein Ethernetadapter ist (WLan = 71)
    If DllStructGetData($strct_AdapterInfo, "Type") = $d_Type Then $s_Ret &= StringTrimRight(StringRegExpReplace(StringTrimLeft(DllStructGetData($strct_AdapterInfo, "Address"), 2), "(.{2})", "$1:"), 7) & ";"

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

    $p_AdapterInfo = DllStructGetData($strct_AdapterInfo, "Next") ; nächsten Adapter holen
    $strct_AdapterInfo = DllStructCreate($tagIP_ADAPTER_INFO, $p_AdapterInfo)
    Until @error
    EndIf

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

    DllClose($h_dll)
    Return StringSplit(StringTrimRight($s_Ret, 1), ";", 2)
    EndFunc ;==>getMACsOfLANDevices

    [/autoit]

    Edit: Oder etwas kürzer:

    Spoiler anzeigen
    [autoit]

    $a_Adapter = GetAdaptersInfo("WLAN")
    If Not @error Then _ArrayDisplay($a_Adapter)

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

    Func GetAdaptersInfo($s_Type = "LAN")
    Local Const $tagIP_ADAPTER_INFO = "ptr;DWORD;char[260];char[132];UINT;BYTE[8];DWORD;UINT;UINT;ptr;ptr;char[16];char[16];DWORD;ptr;char[16];char[16];DWORD;ptr;char[16];char[16];DWORD;BOOL;ptr;char[16];char[16];DWORD;ptr;char;char;DWORD;DWORD;DWORD"
    Local $a_Ret, $s_Ret = "", $buf_AdapterInfo, $p_AdapterInfo, $strct_AdapterInfo, $d_Type
    Local $h_dll = DllOpen("Iphlpapi.dll")
    Local $a_Ret[1][3] = [["Name", "IP", "MAC"]]

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

    Switch $s_Type
    Case "LAN"
    $d_Type = 6
    Case "WLAN"
    $d_Type = 71
    Case Else
    Return SetError(1, 0, -1)
    EndSwitch

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

    $a_Ret = DllCall($h_dll, "DWORD", "GetAdaptersInfo", "ptr", 0, "ULONG*", 0) ; 1. Call um ulOutBufLen zu bestimmen
    $buf_AdapterInfo = DllStructCreate("BYTE[" & $a_Ret[2] & "]")
    $p_AdapterInfo = DllStructGetPtr($buf_AdapterInfo)

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

    DllCall($h_dll, "DWORD", "GetAdaptersInfo", "ptr", $p_AdapterInfo, "ULONG*", $a_Ret[2]) ; 2. Call welcher nun den 1. Adapter zurück gibt
    $strct_AdapterInfo = DllStructCreate($tagIP_ADAPTER_INFO, $p_AdapterInfo)

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

    If Not @error Then
    Do
    If DllStructGetData($strct_AdapterInfo, 8) = $d_Type Then
    ReDim $a_Ret[UBound($a_Ret, 0) + 1][3]

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

    $a_Ret[UBound($a_Ret, 0) - 1][0] = DllStructGetData($strct_AdapterInfo, 4)
    $a_Ret[UBound($a_Ret, 0) - 1][1] = DllStructGetData($strct_AdapterInfo, 12)
    $a_Ret[UBound($a_Ret, 0) - 1][2] = StringTrimRight(StringRegExpReplace(StringTrimLeft(DllStructGetData($strct_AdapterInfo, 6), 2), "(.{2})", "$1:"), 7)
    EndIf
    $p_AdapterInfo = DllStructGetData($strct_AdapterInfo, 1) ; nächsten Adapter holen
    $strct_AdapterInfo = DllStructCreate($tagIP_ADAPTER_INFO, $p_AdapterInfo)
    Until @error
    EndIf

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

    DllClose($h_dll)
    Return $a_Ret
    EndFunc ;==>GetAdaptersInfo

    [/autoit]

    Einmal editiert, zuletzt von AspirinJunkie (24. Mai 2013 um 13:56)

  • Hallo Leute,

    Ihr seid so gut, :rock: da kann ich nichts weiter zu sagen.
    Werde unser miniProg. nun ausbauen und dann verteilen.

    vielen Dank!
    Manfred

    Ja, ich weiß es auch, das Problem ist einen halben Meter vor dem Bildschirm. 8o