Frage zu TCP, Socket, etc..

  • Hi,

    ich würde gerne wissen ob mein Vorhaben auf die Art realisierbar ist.

    1.Ich will mich über einen PHP-Script per TCP auf einem Webmailer einloggen.
    2.Danach will ich dort per TCPSend eine Aktion ausführen ("GET /..../..../...).

    Mein bisheriger Script ist leider erfolglos....

    Meine Frage ist jetzt wenn ich mich 1. über den Socket anmelde habe ich dann zugriff über den sockel auf die Befehle, die auch jeder normale Client hat?

    Hier mein Script:


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    TCPStartup()

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

    $addr = "xx.xx.xx.xxx"
    $port = "80"

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

    $request= "GET /logw.php?pass=XXXXXXXXXXXXXXXXXXXXXX&USR=I3iLLiG&gfx_aktiv=on&server=server26 HTTP/1.1"&@CRLF&@CRLF
    $request2 = "GET /save/event.php?mail[]=36 HTTP/1.1"&@CRLF&@CRLF

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

    $Socket = TCPConnect($addr,$port)

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

    msgbox(0,"",$socket) ;Dort kommt 1808 raus

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

    TCPSend($Socket,$request)
    TCPSend($Socket,$request2)

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Die Idee hatte ich auch schon nur du musst halt angemeldet sein aber ich schaus mir mal an!

  • Mhh mittlereweile hab ich rausgefunden, dass die normale _INetGetSource Funktion auch php "auslöst", allerdings kann nichts übermittelt werden. Das Problem bei mir ist jetzt mit dem Login, denn wenn ich den Link jetzt per Script mit getsource aufrufe meckert er natürlich, weil ich nicht eingeloggt bin :thumbdown:

  • Ok habs jetzt hinbekommen indem ich am anfang mich per _INetGetSource eingeloggt habe....

    Noch ne andere Frage ist _InetGetsource eine der schnellstenmöglichkeiten oder gibts da noch andere?? weil wenn ich mehreren emails ne aktion zuweisen will dauert das enstprechend...

  • Mhh habe jetzt Post Durch get erstzt aber ich weiß nicht so recht wie ich das alles übergeben soll der funktion im grunde muss ja nur 1ne url abgerufen werden...

    wenn ich jetzt z.b:

    http://xxxxxxx.de/save/event.php?mail[]=36

    abrufen will mache ich das dann so?:

    Spoiler anzeigen
    [autoit]


    $aSource = _INetGetSourcePost("http://xxxxxxx.de","save/event.php?mail[]=36")

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

    Func _INetGetSourcePost($sURL, $sPost)
    Local $iSocket, $sHeader, $sRecv, $iIP, $sHost, $aRegExp, $sHttp1,$iErr,$iSend,$aReturn[2]

    If $sURL = '' Or $sPost = '' Then Return SetError(1, 0, 0)

    If StringLeft($sURL, 7) <> 'http://' And StringLeft($sURL, 8) <> 'https://' Then $sURL = "http://" & $sURL
    If StringRight($sURL, 1) <> "/" Then $sURL &= "/"

    $aRegExp = StringRegExp($sURL, "http?://(.*?)/", 3)
    If @error Then Return SetError(2, 0, 0)

    $sHost = $aRegExp[0]
    If $sHost = '' Then Return SetError(3, 0, 0)

    $sHttp1 = StringTrimLeft($sURL,StringInStr($sURL,"/",-1,3)-1)
    If $sHttp1 = '' Then Return SetError(3, 0, 0)


    $sHeader = "GET " & $sHttp1 & " HTTP/1.1" & @CRLF & _ ;post durch get ersetzt....
    "Host: " & $sHost & @CRLF & _
    "User-Agent: AutoIt v3" & @CRLF & _
    "Content-Length: " & StringLen($sPost) & @CRLF & @CRLF & $sPost


    TCPStartup() ;If not already done
    $iIP = TCPNameToIP($sHost)
    If $iIP = '' Or StringInStr($iIP, ".") = 0 Then Return SetError(4, 0, 0)
    $iSocket = TCPConnect($iIP, 80)
    If @error Or $iSocket < 0 Then Return SetError(5, 0, 0)

    $iSend = TCPSend($iSocket, $sHeader)
    If @error Or $iSend < 1 Then Return SetError(6, 0, 0)


    While 1
    $sRecv = TCPRecv($iSocket, 1024)
    $iErr = @error
    If $sRecv <> '' Then
    While 1
    $sRecv &= TCPRecv($iSocket, 1024)
    If @error Then ExitLoop 2
    WEnd
    EndIf
    If $iErr Then Return SetError(7,0,0)
    WEnd

    $aReturn[0] = StringLeft($sRecv,StringInStr($sRecv,@CRLF&@CRLF)-1)
    $aReturn[1] = StringTrimLeft($sRecv,StringLen($aReturn[0])+4)
    Return $aReturn
    EndFunc ;==>_INetGetSourcePost

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


    wäre sehr nett wenn du mir stichpunktartig was dazu sagen könntest weil cih weiß garnicht wo hin mit den parametern... :( hatte auch längere autoit pause ^^

  • sorry nochmal aber ich werde hier noch kirre xD
    ich hab jetzt mit live http header EXAKT das get formular nachgebaut, welches mein browser sendet.
    Dann hab ich deine Vorlage genommen und ausgefüllt jetzt bekomme ich anstatt nem quellcode wirres zeugs raus und die gewünschte aktion die per aufruf gestartet werden soll (getestet mit _INETGetsource) klappt auch nicht :<


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    TCPStartup()

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

    _INetGet("xx.xx.xx.xxx","GET /logw.php?pass=XXXXXXXXXXXXXXXXXXXXXX&USR=I3iLLiG&gfx_aktiv=on&server=server26 HTTP/1.1")

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

    Func _INetGet($IP,$GET)
    $sHeader = $GET & @CRLF & _
    "Host: xxxxxxx.de" & @CRLF & _
    "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" & @CRLF & _
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & @CRLF & _
    "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" & @CRLF & _
    "Accept-Encoding: gzip,deflate" & @CRLF & _
    "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" & @CRLF & _
    "Keep-Alive: 300" & @CRLF & _
    "Connection: keep-alive" & @CRLF & _
    "Referer: http://xxxxxxx.de/" & @CRLF & @CRLF _

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

    $iSocket = TCPConnect($IP,80)
    $iSend = TCPSend($iSocket, $sHeader)

    While 1
    $sRecv = TCPRecv($iSocket, 1024)
    msgbox(0,"1",$sRecv)
    If $sRecv <> '' Then
    While 1
    $sRecv &= TCPRecv($iSocket, 1024)
    msgbox(0,"2",$sRecv)
    WEnd
    EndIf
    WEnd

    msgbox(0,"3",$sRecv)
    EndFunc

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

    desweiteren kommt er komischerweise nicht aus der While schleife heraus ?!? und mein Recv ist z.B:

    Spoiler anzeigen
    Code
    0x485454502F312E3120333032204D6F7665642054656D706F726172696C790D0A446174653A205468752C2032382041756720323030382031303A35343A333320474D540D0A5365727665723A204170616368652F312E332028556E697829206D6F645F73736C2F322E382E3238204F70656E53534C2F302E392E3866204175746850472F312E332046726F6E74506167652F352E302E322E323633350D0A43616368652D436F6E74726F6C3A206E6F2D73746F72652C206E6F2D63616368652C206D7573742D726576616C69646174652C20706F73742D636865636B3D302C207072652D636865636B3D300D0A436F6E74656E742D456E636F64696E673A20677A69700D0A457870697265733A205468752C203139204E6F7620313938312030383A35323A303020474D540D0A5033503A2043503D224E4F492041444D20444556205053416920434F4D204E4156204F5552204F54526F2053545020494E442044454D220D0A507261676D613A206E6F2D63616368650D0A566172793A204163636570742D456E636F64696E670D0A582D506F77657265642D42793A205048502F352E322E350D0A5365742D436F6F6B69653A205048505345535349443D37316438363363613930643239346266643336643266313664663231376135363B20706174683D2F0D0A5365742D436F6F6B69653A2077756E723D343130313436360D0A4C6F636174696F6E3A206D61696E2E7068703F706167653D67617264656E0D0A436F6E6E656374696F6E3A20636C6F73650D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A436F6E74656E742D547970653A20746578742F68746D6C0D0A0D0A3161200D0A1F8B081110000000000302000000FFFF030000000000000000000D0A300D0A0D0A

    Einmal editiert, zuletzt von I3iLLiG (28. August 2008 um 13:08)

  • habs rausbekommen :)

    also dieses 0xsdaidhashdasoidhasdj ist Binary und kann per BinaryToString umgewandelt werden.

    Er hat die Aktionen nicht ausgeführt, weil ich natürlich auch die session ID mit übermitteln musste außerdem habe ich diese mit "" übermittelt obwohl dort keine hingehörten ;)

    Vielen Dank nochmal an Spider!