Hostname von Lan-IP erhalten

  • [autoit]


    #include <Array.au3>
    $LanPCs = _NetServerEnum(0xFFFFFFFF)
    _ArrayDisplay($LanPCs)

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

    Func _NetServerEnum ($iSrvType = -1, $sDomain = '')
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 100, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1]=[DllStructGetData($uBufPtr,3)]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord,2))
    DllStructSetData($uString,1,BinaryToString(DllStructGetData($sNBName,1),2))
    $res[$i] = DllStructGetData($uString,1)
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    Return $res
    EndFunc

    [/autoit]
  • Ja das stimmt, jedoch ist der Hostname einfach der Computername bei meinem (finde ich fast besser, denn der andere ist meistens ein Router orientierter Name also z.B. Speedportw504.Phil-IT oder sowas) und die IP kannst du einfach auslesen indem du folgenden Zusatz nimmst. Ich habe noch eine Funktion geschrieben, jetzt bekommst du Computernamen und IP in einem Array. Lg Phil

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $LanPCs = _SetIP(_NetServerEnum(0xFFFFFFFF))

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

    ; $Anzahl = $LanPCs[0][0]
    ; $ErsterComputername = $LanPCs[1][0]
    ; $ErsteIP = $LanPCs[1][1]
    ; $ZweiterComputername = $LanPCs[2][0]
    ; $ZweiteIP = $LanPCs[2][1]

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

    _ArrayDisplay($LanPCs)

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

    Func _NetServerEnum ($iSrvType = -1, $sDomain = '')
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 100, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1]=[DllStructGetData($uBufPtr,3)]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord,2))
    DllStructSetData($uString,1,BinaryToString(DllStructGetData($sNBName,1),2))
    $res[$i] = DllStructGetData($uString,1)
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    Return $res
    EndFunc

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

    Func _SetIP($aPCs)
    Dim $aReturn[$aPCs[0]+1][2]
    $aReturn[0][0] = $aPCs[0]
    TCPStartup()
    For $i = 1 To $aPCs[0]
    $aReturn[$i][0] = $aPCs[$i]
    $aReturn[$i][1] = TCPNameToIP($aPCs[$i])
    Next
    TCPShutdown()
    Return $aReturn
    EndFunc

    [/autoit]
  • Welche 2 Geräte findet er denn? Wahrscheinlich dein Smartphone, aber wieso hast du 3 Router im Netz? Die sollte das Programm ja eigentlich nicht erkennen, da sie andere Gateways nutzen.

  • Woran sind die APs angebunden? An deinen 'normalen' / Hauptrouter? Stimmt das Smartphone ist ja auch nicht Windows/Bit-fähig, nicht das gleich Protokol vielleicht. Besteht jetzt eigentlich noch ein Problem oder sind das nur noch zusätzliche Fragen?:D