IP aus socket ermitteln.

  • hey leute, mein chat ist fast fertig, ich benötig jetzt allerdings noch die IP adressen der clients die mit mir verbunden sind, habt ihr eine ahnung wie ich die ip adressen ermitteln kann?


    irgendwie hab ich was mit SockettoIp() mitbekommen, hab aber keine ahnung wies gehen soll.

    2 Mal editiert, zuletzt von TimoIt (29. Juli 2011 um 16:32)

  • [autoit]

    Func SocketToIP($SHOCKET)
    Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
    Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
    "ptr",DLLStructGetPtr($sockaddr),"int*",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
    $sockaddr = 0
    Return $aRet
    EndFunc

    [/autoit]

    Wer auch immer diese Funktion geschrieben hat, er möge mir für die fehlende Erwähnung seines Namens verzeihen. ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Wie der Name und der geforderte Parameter der Funktion schon sagt:

    SocketToIp nimmt einen Socket, und gibt dir eine IP. Dafür solltest du ihm allerdings schon auch den Socket gönnen, zu dem du die IP wissen willst.... ;)

    $Client1_IP = SocketToIp( $Client1_Socket );

    Sozusagen.

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • [autoit]

    $con = TCPAccept($srvSocket)
    If $con >= 0 Then
    $rec = ""
    While True
    $rec &= TCPRecv($con,$max_Anzahl_Zeichen)
    If @error Then ExitLoop
    WEnd
    ;---------------------------------------

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

    $msg_gesamt = $msg_gesamt & @CRLF & $rec & @CRLF
    GUICtrlSetData($Verlauf,$msg_gesamt)

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

    if $con >= 0 then
    $Client1IP = SocketToIp($srvSocket)

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

    MsgBox(0,"hallo",$Client1IP)

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

    $cltSocket = TCPConnect($Client1IP,$ClientPort)
    TCPSend($cltSocket,$msg_gesamt)
    TCPCloseSocket($cltSocket)
    EndIf

    [/autoit]


    Ich muss ja den oberen Socket $srvSocket eingeben ode(Zeile 18)r? wenn ichs mach dann kommt als ergebniss(msgbox) nur "0" raus!

  • Der Socket mit der Verbindung ist $con. Dein Ansatz ist übrigens nicht sinnvoll. Die Antwort sollte über die gleiche Verbindung gesendet werden, über die auch die Anfrage empfangen wurde.
    Schau dir am besten mal Client und Server in der Hilfe zu TCP... an.

  • ok, mit $con hats geklappt.

    wenn ich mich mit einem client anmelde funktionierts, sobal ich aber von einem zweiten rechner nen client starte funktionier nichts-.-

    Einmal editiert, zuletzt von TimoIt (29. Juli 2011 um 16:50)

  • Da könnten aber sehr leicht die Firewalls dazwischenfunken. Wenn es nicht nötig ist, spezielle Verbindungen aufzubauen würde ich deshalb möglichst vorhandene Verbindungen nutzen. Falls das für dich aber kein Problem ist, dann mach ruhig weiter.