Ankündigung

Einklappen
Keine Ankündigung bisher.

Socks Server Implementation

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Socks Server Implementation

    Hi, ich versuche einen Socks 4 Server in PHP zu schreiben.
    Bis jetzt soll der Server zum Testen nur eine Anfrage bearbeiten und dann schließen.
    Ich teste den Server, indem ich ihn als Socks Proxy in Firefox einstelle.
    Wenn ich nun eine Website aufrufe, zeigt Firefox die Antwort nicht an, sondern einen Download-Dialog.
    In der heruntergeladenen Datei ist der HTTP-Header und der HTML-Code, das würde passen.
    Das einzige Problem ist, dass das erste Byte der Datei ein null-Byte ist, deswegen funktioniert es nicht.
    Ich weiß aber nicht, wie dieses null-Byte dahin kommt, denn im Puffer, der an Firefox gesendet wird ist es nicht enthalten.

    Hier der Code:

    PHP-Code:
    <?php

    $target_ip 
    "";

    set_time_limit(1000);

    if(!(
    $sock socket_create(AF_INETSOCK_STREAM0)))
    {
        
    $errorcode socket_last_error();
        
    $errormsg socket_strerror($errorcode);
        die(
    "Couldn't create socket: [$errorcode$errormsg \n");
    }
     
    echo 
    "Socket created \n";
     
    // Bind the source address
    if( !socket_bind($sock"127.0.0.1" 5000) )
    {
        
    $errorcode socket_last_error();
        
    $errormsg socket_strerror($errorcode);
        die(
    "Could not bind socket : [$errorcode$errormsg \n");
    }
     
    echo 
    "Socket bind OK \n";
     
    if(!
    socket_listen ($sock 10))
    {
        
    $errorcode socket_last_error();
        
    $errormsg socket_strerror($errorcode);
        die(
    "Could not listen on socket : [$errorcode$errormsg \n");
    }
     
    echo 
    "Socket listen OK \n";
    echo 
    "Waiting for incoming connections... \n";
     
    //Accept incoming connection - This is a blocking call
    $client =  socket_accept($sock);
     
    //display information about the client who is connected
    if(socket_getpeername($client $address $port))
    {
        echo 
    "Client $address : $port is now connected to us. \n";
    }
     

    $input socket_read($client9);
    $target_port 0;

    echo 
    "<br/>msg:";

    for(
    $i=0;$i<9;$i++)
    {
        echo 
    ord($input[$i]) + " ";
    }

    echo 
    "<br/>";

    for(
    $i=4;$i<8;$i++)
    {
        
    $target_ip $target_ip ord($input[$i]);
        if(
    $i != 7$target_ip $target_ip ".";
    }

    $target_port ord($input[2]) * 256;
    $target_port $target_port ord($input[3]);

    echo 
    "<br/>Target-Port: " $target_port;


    $response $input;  
    $response[0] = chr(0);
    $response[1] = chr(90);
    socket_write($client$response); //SOCKS accepted

    //Verbindung zum Ziel

    if(!($tsock socket_create(AF_INETSOCK_STREAM0)))
    {
        
    $errorcode socket_last_error();
        
    $errormsg socket_strerror($errorcode); 
        die(
    "Couldn't create socket: [$errorcode$errormsg \n");
    }
    echo 
    "Target-Socket created <br/>";
    if(!
    socket_connect($tsock $target_ip 80))
    {
        
    $errorcode socket_last_error();
        
    $errormsg socket_strerror($errorcode);
        die(
    "Could not connect: [$errorcode$errormsg \n");
    }

    while(
    true)
    {
        
    $reply "";
        echo 
    "<br/>";
        
    $input socket_read($client2048);
        echo 
    "Requeset Browser: " $input;
        echo 
    "<br/>";
        
    socket_write($tsock$input);
        
    $reply socket_read($tsock2048);
        echo 
    "Reply from target " $reply;
        
    socket_write($client$reply);
        die(
    ""); // nach erster Abfrage abbrechen
    }

    echo 
    "<br/>Ziel-Ip: " $target_ip;

    socket_close($client);

    ?>

  • #2
    PHP-Code:
    $response $input;  
    $response[0] = chr(0);
    $response[1] = chr(90);
    socket_write($client$response); //SOCKS accepted 
    Für was soll das gut sein?
    DevBlog|3D Online-Shopping|Xatrium

    Kommentar


    • #3
      Die Bestätigung an den Client, dass die Socks-Anfrage akzeptiert wurde.
      Laut SOCKS-Protokoll muss dafür byte 1 = 0 sein und byte 2 = 90.

      Kommentar


      • #4
        Besteht das Problem noch?
        DevBlog|3D Online-Shopping|Xatrium

        Kommentar

        Lädt...
        X