TCP socket to IP

  • hi, also ich würde gerne die public ip der sockets herausfinden, welche auf meinen TCP server connecten,

    habe dies hier gefunden:

    [autoit]

    Func GetIP($Socket)
    Local $SocketAddress
    $SocketAddress = DllStructCreate("short;ushort;uint;char[8]")
    $IP = DllCall("Ws2_32.dll", "int", "getpeername", "int", $Socket, "ptr", DllStructGetPtr($SocketAddress), "int*", DllStructGetSize($SocketAddress))
    If Not @error And $IP[0] = 0 Then
    $IP = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($SocketAddress, 3))
    If Not @error Then $IP = $IP[0]
    Else
    $IP = @IPAddress1
    EndIf
    $SocketAddress = 0
    Return $IP
    EndFunc ;==>SocketToIp

    [/autoit]

    jedoch bekomme ich immer fehler wenn diese funktion aufgerufen wird...
    und zwar in diesen zeilen:
    $IP = DllCall("Ws2_32.dll", "int", "getpeername", "int", $Socket, "ptr", DllStructGetPtr($SocketAddress), "int*", DllStructGetSize($SocketAddress))
    $IP = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($SocketAddress, 3))

    ich selbst habe sehr wenig ahnung von DLL daher weiß ich auch nicht wo ich eventuell dort etwas ändern muss!

    MfG azunai

    Einmal editiert, zuletzt von azunai (20. April 2008 um 14:32)

    • Offizieller Beitrag

    Hallo

    Aus der Hilfe, bei TCPRecv, Funktioniert mit 3.2.10.0 oder neuer:

    Spoiler anzeigen
    [autoit]

    ; Function to return IP Address from a connected socket.
    ;----------------------------------------------------------------------
    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

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

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "ptr", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc ;==>SocketToIP

    [/autoit]

    Mfg Spider