Fsockopen

Discussion in 'PHP' started by In.Exploit, 7 Jan 2010.

  1. In.Exploit

    In.Exploit Banned

    Joined:
    2 Dec 2009
    Messages:
    91
    Likes Received:
    21
    Reputations:
    1
    Открываю я сокет с помощю
    fsockopen()
    Подключаюсь к сайту. Как проверить какой ответ отдаёт вервер?
    Ну если статус 200! то продолжить.

    или же сокет сам закрывается когда ответ приходит отличный от 200?

    тогда
    $fp = fsockopen()
    if (!$fp) {
    die("файла на удалённом сервере нет");
    }
     
  2. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    PHP:
    $fp fsockopen("udp://127.0.0.1"13$errno$errstr);
    $errno, $errstr, http://ua2.php.net/fsockopen почитай полностью про функцию.
     
    _________________________
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    In.Exploit по секрету - с помощью ТОЛЬКО fsockopen - можно проверить ТОЛЬКО работоспособность порта на сервере. Как проверить наличие файла - вам отписали в предыдущем топике. Вы еще отмахнулись, мол, вам не нужен кот после !$fp

    Заканчивайте плодить темы, для нубских вопросов - есть выделенный топик про пхп
     
    _________________________
  4. AFoST

    AFoST Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    fsockopen открывает только сокет. через сокет вдальнейшем можно передать инфу. чтобы узнать есть ли на удалённом сайте(соединение с которым ты открыл) файл, нужно отправить http - запрос к нему. тогда уже вернётся код(200/404/...) от сервера.
    для этой цели имхо curl легче и лучше. там можно одни заголовки ловить.
     
  5. vvs777

    vvs777 Elder - Старейшина

    Joined:
    16 Nov 2004
    Messages:
    393
    Likes Received:
    212
    Reputations:
    4
    получите и распишитесь. запросы и что делать с ответом думаю сами замените
    PHP:
        if($s=fsockopen($proxy,$prprt))
        
    //if($s=fsockopen("ui.bigmir.net",80))
        
    {
    $strp="GET http://ui.bigmir.net/gen/rnd/".$capt.".png HTTP/1.0
    Accept: */*
    Cookie: "
    .$cookie."
    "
    .$ua."
    Referer: http://passport.bigmir.net/icq/
    Host: ui.bigmir.net
    Connection: Close\r\n\r\n"
    ;
            
    fputs($s,$strp);
            
    $out="";
            while(!
    feof($s))
            {
                
    $out.=fgets($s,1024);
            }
            
    $pos=strpos($out,"\r\n\r\n");
            
    $caca=trim(substr($out,$pos+1));
            
    $fp=fopen("./cap.png","w");
            
    fwrite($fp,$caca);
            
    fclose($fp);
            
    //echo $caca;
            
    if (strstr("$caca","GIF89"))
            {
                
    $fp fopen("./cap0.png"'rb' );
                
    fpassthru($fp);
                @
    fclose($fp);
                die();
            }

            
    $fp fopen("./cap.png"'rb' );
            
    fpassthru($fp);
            @
    fclose($fp);
        }
        else
        {
            if (
    $dev!=0) echo "Can't open socket to server in getIMG!";
            die();
        }    
    это из древнего реггера асек через бигмир, который я однажда починил и юзал втихаря :D
     
  6. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    Вот несколько примеров получения Заголовков:
    Sockets
    PHP:
    <?php
    $fp 
    = @fsockopen("forum.antichat.ru"80$errno$errstr3);
    if (!
    $fp) {
        echo 
    "$errstr ($errno)<br />\n";
    } else {
        
    $out "GET /bn/evapharmacy.gif HTTP/1.1\r\n";
        
    $out .= "Host: forum.antichat.ru\r\n";
        
    $out .= "Connection: Close\r\n\r\n";
        
    fwrite($fp$out);
        
        while (!
    feof($fp)) {
            @
    $data .= fread($fp1024*5);
        }
        
    fclose($fp);
        list(
    $headers$body) = explode("\r\n\r\n"$data);
        echo 
    $headers;    
        
    }
    ?>
    cURL
    PHP:
    <?php
    $ch 
    curl_init('http://2forum.antichat.ru/bn/evapharmacy.gif');
    curl_setopt($chCURLOPT_HEADER1);
    curl_setopt($chCURLOPT_NOBODY1);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_TIMEOUT3);
    $res curl_exec($ch);
    $errno curl_errno($ch);
    $error curl_error($ch);
    curl_close($ch);
    if(
    $errno 0)
    echo 
    $errno.':'.$error;
    else echo 
    $res;
    ?>
    get_headers
    PHP:
    <?php
    $headers 
    get_headers('/bn/evapharmacy.gif');
    foreach (
    $headers as $k => $v) {
    echo 
    '['.$k.'] => '.$v.'<br>';
    }
    ?>
     
    _________________________
  7. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Простите, можно поинтересоваться, почему в этой строчке:

    @$data .= fread($fp, 1024*5);

    стоит собачка и 1024*5? Правда интересно
     
  8. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    Как видиш дата дописывается а т.к. переменная небыла прежде создана пыха выдаст Нотайс.
    Привычка записи такая, почему именно по 5кб, моё оптимальное решение
     
    _________________________