Pokaż wyniki 1 do 5 z 5

Temat: dlaczego nie dziala

  1. #1
    Zarejestrowany
    Jan 2007
    Skąd
    somewhere in time
    Postów
    510

    Domyślnie dlaczego nie dziala

    czesc,
    kto wie dlaczego nie dziala ten skrypt tzn zamiast pobierac tlumaczenie dla kazdego wyrazu to on caly czas pobiera dla pierwszego wyrazu

    Kod php:
    <?php


    function iron($string)
    {
        
    $string=trim($string);
        
    $wyraz;
        
    $a=0;
        for(
    $i=0;$i<strlen($string);$i++)
        {
            
            if(
    ord($string[$i])!==32)
            {
                 
    $wyraz[$a].=$string[$i];
            }
            else 
    $a++;
        
        }    
        return 
    $wyraz;
    }



    set_time_limit(0);
    if(isset(
    $_POST['wyslij']))
    {
        @
    $start=fsockopen("www.translate.pl",80,$er,$ers,30);
        if(!
    $start)
        {
                echo 
    $er[$ers];
        }
        else
        {
            
    $slowo=$_POST['slowo'];
            
    $wyrazy=iron($slowo);
            foreach(
    $wyrazy as $klucz)
            {
                
            
            
                
    $wynik="";
                
    $cips;
                
    $dane="GET /odp.php4?direction=1&word=$klucz HTTP/1.1\r\n";
                
    $dane.="Host: www.translate.pl\r\n";
                
    $dane.="Content-Type: application/x-www-form-urlencoded\r\n";
                
    $dane.="Content-Length: 14\r\n\r\n";
                
    $dane.="Connection: Close\r\n";
                
    fwrite($start,$dane);
                while(!
    feof($start)) 
                {
                    
    $wynik.=fgets($start);
                }
                
    $iron=strpos($wynik,"Tłumaczenie: ");
                
    $iron2=strpos($wynik,"</table>",$iron);
                for(
    $i=$iron;$i<$iron2;$i++)
                {
                    
    $cips.=$wynik[$i];
                }
                
    $cips=strip_tags($cips);
                
    $but=explode(";&nbsp;",$cips);
            
                for(
    $i=0;$i<count($but);$i++)
                {    
                    echo 
    $but[$i]."</br>";
                }
                

            }
        }

        
            
        
    }
    ?>

    <form action="trans.php" method="post">
    zdanie w jez ang: <input type="text" name="slowo">
    <input type="submit" name="wyslij">
    </form>

    wpiszcie sobie np girl boy i zobaczycie oco mi chodzi
    i jeszcze jedna sprawa:
    czy takie cos jest legalne tzn jakbym chciał napisać skrypta tłumaczącego jakieś zdania który by wlaśnie łączył się z jakąś stroną i pobierał dane z ich bazy ? legalne?
    ii od razu next question: jak mozna sie zabezpieczyc? tzn jak bym był na miejscu adminow strony translate.pl jak bym mógł sie zabezpieczyć żeby mi rzaden "cienias" nie podpieprzał danych tak jak ja w tym skrypcie?
    jest na to jakiś prosty sposób?

  2. #2
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Coś pomieszałeś z nagłówkami HTTP. Po pierwsze próbujesz wysłać żądanie GET używając wartości Content-Type przeznaczonej do żądania POST. Po drugie podajesz Content-Length, które też służy do metody POST. Po trzecie po nagłówku Content-Length użyty został podwójny CRLF co jest jednoznaczne z końcem nagłówka HTTP. A więc kolejny nagłówek (w Twoim przypadku Connection) może być traktowany jako ciało żądania POST, co raczej nie zgadza się z wartością nagłówka Content-Length. Wtedy powinienieś dostać odpowiedź 413. Jednak według mnie serwer powinien odpowiedzieć kodem 400, ze względu na błędną składnię zapytania.

    Cytat Napisał ironwall Zobacz post
    czesc,
    kto wie dlaczego nie dziala ten skrypt tzn zamiast pobierac tlumaczenie dla kazdego wyrazu to on caly czas pobiera dla pierwszego wyrazu
    Wydaje mi się, że dzieje się tak bo otwierasz socket tylko raz przez co po pierwszej wysłanej odpowiedzi przez serwer, wysyła on pakiet z flagą FIN i kończy połączenie. Na każde kolejne Twoje żądanie odpowiada pakietem z flagą RST. Więc jakbyś umieścił funkcję fsockopen() w pętli, połączenie nawiązywane byłoby ponownie. Tak sądzę.
    Cytat Napisał ironwall Zobacz post
    czy takie cos jest legalne tzn jakbym chciał napisać skrypta tłumaczącego jakieś zdania który by wlaśnie łączył się z jakąś stroną i pobierał dane z ich bazy ? legalne?
    W mojej ocenie jest to legalne, chociaż nie znam zagadnień prawa z informatycznego punktu widzenia. W dodatku serwer, z którego pobierałbyś dane najprawdopodobniej nie rozróżni czy jest to normalne żądanie, czy żądanie wykonywane przez skrypt (jeżeli zostanie zachowana poprawność nagłówków).
    Cytat Napisał ironwall Zobacz post
    ii od razu next question: jak mozna sie zabezpieczyc? tzn jak bym był na miejscu adminow strony translate.pl jak bym mógł sie zabezpieczyć żeby mi rzaden "cienias" nie podpieprzał danych tak jak ja w tym skrypcie?
    jest na to jakiś prosty sposób?
    Znów wydaje mi się, że nie ma za bardzo możliwości ochrony takiej strony z takiego samego powodu jak napisałem powyżej. Ewentualnie możnaby zastosować jakieś ograniczenie na adres IP przy bardzo dużej częstotliwości żądań, chociaż i to nie ma raczej sensu bo strona jest publiczna i właściwie o to chodzi, aby odbierała jak najwięcej żądań.

  3. #3
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Scraping contentu z innych stron nie jest 'zalecany' - firmy do czegos takiego daja API bo wywolanie przez API znacznie mniej obciaza systemy niz wygenerowanie calej strony z ktorej Ty wybierzesz jedno zdanie... poza tym generuje znacznie mniej ruchu.

    Nie kazda firma daje API a do tego regulamin czest jawnie zabrania takich dzialan. Monitorowanie takiego czegos jest bardzo proste - ile zapytan moze czlowiek wykonac w logicznym czasie a ile moze wykonac skrypt? Uwierz mi, ze jak zaczniesz w jakis sposob zjadac zasoby za bardzo to Cie wytna... nawet jesli nie masz stalego IP to sobie poradza sposobow na utrudnienie zycia scraper'om jest dosc duzo.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  4. #4
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Cytat Napisał tqm Zobacz post
    .. nawet jesli nie masz stalego IP to sobie poradza sposobow na utrudnienie zycia scraper'om jest dosc duzo.
    A to całkiem ciekawe zagadnienie. Mógłbyś przybliżyć na jakiej zasadzie takie coś działa? Jak można zablokować działanie takich skryptów?

  5. #5
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    I tak i nie... metod jest wiele...

    1. dlawimy ruch wg ip - max ilosc polaczen w czasie a pozniej wymuszamy opoznienia - dosc skuteczne i srednio trudne w ustawieniu nawet - wymaga po prostu tuningu
    2. automatyczna analiza logow i banowanie namolnych uzyszkodnikow gdzie jasno widac ze to automat a nie czlowiek - bardzo skuteczne... wprowadzenie opozniej do scraper'a powoduje ze jest on bezuzyteczny!
    3. obfuskacja kodu np poprzez tworzenie w locie kodu JS ktory wyswietli w przegladarce zawartosc dokumentu (mozna dodac proste kodowanie - wiekszosc scraperow odpada tak czy inaczej) - nie widzialem jeszcze nic poza przegladarka WWW co mialo by pelen stos JS

    to tak co przyszlo mi do glowy na poczekaniu teraz, wczoraj jak jeszcze kumalem co sie do okola dzieje mialem jeszcze ze 2 pomysly ale teraz juz nie pamietam - przyszedlem do pracy ale i tak jestem jeszcze w trybie power saving :P
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

Podobne wątki

  1. Odpowiedzi: 6
    Autor: 01-31-2009, 01:34
  2. Dlaczego nie działa??
    By Achilles1991 in forum PHP/CGI/ASP/JSP/J2EE
    Odpowiedzi: 2
    Autor: 11-25-2007, 08:19
  3. Jak to dziala?
    By Macok in forum C/C++
    Odpowiedzi: 5
    Autor: 05-22-2007, 22:09
  4. Dlaczego Linux a nie Windows?
    By fedor in forum Linux
    Odpowiedzi: 6
    Autor: 02-01-2007, 21:58

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52