Avatar billede oyoyg Nybegynder
23. april 2006 - 18:21 Der er 28 kommentarer og
1 løsning

Crawl password beskyttet side

Hej,

Jeg kunne på mit website godt tænke mig at crawle hele websitet, til en intern søge funktion. Jeg regner med at bruge preg_match osv. , men hvordan for jeg den til at logge ind på sitet for at se alt, som også er password beskyttet?
Avatar billede jakobdo Ekspert
23. april 2006 - 20:35 #1
Enten må du lave noget kode som evt har en session = logget ind fra start.
Du må jo sætte en session = noget, når en bruger er logget ind.
Avatar billede oyoyg Nybegynder
23. april 2006 - 21:01 #2
Ja, men problemet ligger lige netop i at kører det på en remote server. Den arbejder vel ikke på samme måde som en browser? og hvordan får jeg banket session en på serveren?
Avatar billede jakobdo Ekspert
23. april 2006 - 21:17 #3
Har du et login til den pågældende side?
Ejer du selv siden?
Har du lov til at crawle den?
Avatar billede oyoyg Nybegynder
23. april 2006 - 22:41 #4
Ja, jeg har en normal login form?
Avatar billede jakobdo Ekspert
24. april 2006 - 07:57 #5
Er det din side? Og har du lov til at crawle den?
Avatar billede oyoyg Nybegynder
24. april 2006 - 14:17 #6
Ja, og jeg har lov til at crawle så meget jeg vil.. Som sagt har jeg planlagt en intern søge funktion :)
Avatar billede jakobdo Ekspert
24. april 2006 - 14:39 #7
Så er det jo bare at lave noget kode, hvor du i toppen laver:
<?php
session_start();
$_SESSION['logged_in'] = true;
crawl()...
?>
Avatar billede oyoyg Nybegynder
25. april 2006 - 16:28 #8
Hej igen, undskyld jeg ikke har svaret dig, men der har simpelthen ikke været tid de sidste par dage..

Lige netop der ligger mit problem. Webserveren bliver hostet af et professionelt firma i Sverige. Pga. af sikkerhed skal alt derfor holdes inde for husets fire vægge også crawleren.

Derfor forstiller jeg mig noget med at kunne fodre et eller andet, med crawlerens administrator informationer, også selv logge ind, og crawle, hjemme fra kontoret i Danmark. Forstå du min hensigt, og har du nogen ide om hvordan jeg ordner dette?
Avatar billede jakobdo Ekspert
25. april 2006 - 21:33 #9
Det med at crawle, kan du lave med en recursiv funktion, som kalder hver gang den møder et link.
Det med login, skal du lave via noget socket/post, læs svar, gem session og smid det med i hvert request efterfølgende.

Kan du ikke få det prof. firma til at give dig en fuld kopi af sitet?
Avatar billede oyoyg Nybegynder
25. april 2006 - 22:42 #10
Kunne jeg selvfølgelig godt, men da jeg ønsker en opdateret søge funktion er dette ikke helt en mulighed :)
Avatar billede jakobdo Ekspert
26. april 2006 - 07:26 #11
Kan du selv kode php?
Avatar billede oyoyg Nybegynder
26. april 2006 - 13:30 #12
Ja, men dette har bare givet mig nogle problemmer. Er jo ikke selveste Sergey Brin :)

Sidder dog og gumler lidt på hvordan jeg fixer den der socket/post?
Avatar billede jakobdo Ekspert
26. april 2006 - 13:38 #13
Prøv at kig på denne kode:

<?php
echo "<pre>";

$user = "USER";
$pass = "PASS";
$host = "www.domain.dk";
$port = 80;
$path = "/index.php?login=true";

//you will need to setup an array of fields to post with
//then create the post string
$formdata = array ("Myhdl" => $user, "Mypin" => $pass);
//build the post string
foreach($formdata AS $key => $val)
{
    $poststring .= urlencode($key) . "=" . urlencode($val) . "&";
}

// strip off trailing ampersand
$poststring = substr($poststring, 0, -1);

$fp = fsockopen("http://".$host, $port, $errno, $errstr, $timeout = 30);
if(!$fp)
{
    //error tell us
    echo "$errstr ($errno)\n";
}
else
{
    //send the server request
    fputs($fp, "POST $path HTTP/1.1\r\n");
    fputs($fp, "Host: $host\r\n");
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
    fputs($fp, "Content-length: ".strlen($poststring)."\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $poststring . "\r\n\r\n");
    //loop through the response from the server
    while(!feof($fp))
    {
        $output .= fgets($fp, 4096);
    }
    //close fp - we are done with it
    fclose($fp);
}

if (preg_match('/PHPSESSID=(.+?);/', $output, $regs)) {
    $phpsessid = $regs[1];
}

echo "Session: " . $phpsessid . "\n";
flush();

?>
Avatar billede oyoyg Nybegynder
27. april 2006 - 16:35 #14
Hej, jeg skal ærligt indrømme at jeg ikke forstår alt indholdet af ovenstående. Logger du ind via login formen eller hvad gør den?
Avatar billede jakobdo Ekspert
27. april 2006 - 18:07 #15
Kender du noget php?
Avatar billede oyoyg Nybegynder
27. april 2006 - 19:14 #16
Til dels, hvilket vil sige at jeg ikke normalt skriver ting som det her, men før har lavet ting som login systemer, nyhedssystemer osv. ofte rettelser og vedligeholdelse.
Avatar billede jakobdo Ekspert
27. april 2006 - 19:28 #17
Ok, jeg må indrømme jeg ikke har lyst til at lave en komplet løsning her.
Men jeg synes du har fået nogle stumper som du kan prøve lidt med.
Så hvis du forventer en færdig løsning fra mig (i det her tilfælde) så vil jeg give op.
Men jeg vil gerne prøve at fodre dig med ideer! :o)
Avatar billede oyoyg Nybegynder
28. april 2006 - 14:40 #18
Helt i orden, kan jeg godt forstå.. Det jeg mangler er bare noget information om hvordan jeg gøre så min server har adgang til siderne. Altså som du selv siger, er det vel nødvendigt at åbne en slags session på serveren?
Avatar billede jakobdo Ekspert
28. april 2006 - 15:02 #19
Ja, men du skal bruge sockets.
Du åbner en socket til hjemmesiden. (ligesom når du åbner i din browser)
Så sender du de info, som du ellers ville taste når du sad i browseren.
Så læser vi de data der kommer tilbage (sessionid)
Det skal vi sende med efterfølgende, for at serveren ved vi er logget ind
Avatar billede oyoyg Nybegynder
28. april 2006 - 19:02 #20
Okey, det er ikke sådan at du kender nogle gode eksempler på hvordan dette gøres?
Avatar billede jakobdo Ekspert
28. april 2006 - 22:20 #21
Har du set mit indlæg fra: 26/04-2006 13:38:42 ???
Det er et eksempel.
Prøv nu at arbejd en smule med det selv.
Det virker ikke helt som om du overhovedet bare forsøger en lille smule selv.
Avatar billede oyoyg Nybegynder
28. april 2006 - 22:23 #22
Til din oplysning har jeg brugt de sidste 6 timer (Uden at overdrive), på at søge efter sockets og hvad ved jeg på google. Mest pga. jeg hverken kan finde hoved eller hale i det fra den 26

:)
Avatar billede jakobdo Ekspert
28. april 2006 - 23:12 #23
Jeg har lavet et yderligere eksempel.

Denne kode har jeg gemt som: http://www.codebreaker.dk/exp/704739.php

<?php
session_start();
//http://www.eksperten.dk/spm/704739
if(isset($_POST['login']))
{
    if($_POST['user'] == 'user1' && $_POST['pass'] == 'pass2')
    {
        $_SESSION['login'] = true;
        echo "WE HAVE A WINNER";
    }
    else
    {
        echo "WE HAVE A LOOOOSER";
    }
}

?>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="post">
User: <input type="text" name="user"><br />
Pass: <input type="password" name="pass"><br />
<input type="submit" name="login" value="Login">
</form>

Og med denne kode logger jeg ind via remote kald:

<?php
echo "<pre>";

$user = "user1";
$pass = "pass2";
$login = "LOGIN";
$host = "www.codebreaker.dk";
$port = 80;
$path = "/exp/704739.php";

//you will need to setup an array of fields to post with
//then create the post string
$formdata = array ("user" => $user, "pass" => $pass, "login" => $login);
//build the post string
foreach($formdata AS $key => $val)
{
    $poststring .= urlencode($key) . "=" . urlencode($val) . "&";
}

// strip off trailing ampersand
$poststring = substr($poststring, 0, -1);

$fp = fsockopen($host, $port, $errno, $errstr, $timeout = 30);
if(!$fp)
{
    //error tell us
    echo "$errstr ($errno)\n";
}
else
{
    //send the server request
    fputs($fp, "POST $path HTTP/1.1\r\n");
    fputs($fp, "Host: $host\r\n");
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
    fputs($fp, "Content-length: ".strlen($poststring)."\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $poststring . "\r\n\r\n");
    //loop through the response from the server
    while(!feof($fp))
    {
        $output .= fgets($fp, 4096);
    }
    //close fp - we are done with it
    fclose($fp);
}
echo '<pre>';
echo $output;
echo '</pre>';
flush();

if (preg_match('/PHPSESSID=(.+?);/', $output, $regs))
{
    $phpsessid = $regs[1];
}

echo "Session: " . $phpsessid . "\n";
flush();

?>
Avatar billede jakobdo Ekspert
28. april 2006 - 23:29 #24
Og koden er yderligere udbygget:

<?php

$user = "user1";
$pass = "pass2";
$login = "LOGIN";
$host = "www.codebreaker.dk";
$port = 80;
$path = "/exp/704739.php";

//you will need to setup an array of fields to post with
//then create the post string
$formdata = array ("user" => $user, "pass" => $pass, "login" => $login);
//build the post string
foreach($formdata AS $key => $val)
{
    $poststring .= urlencode($key) . "=" . urlencode($val) . "&";
}

// strip off trailing ampersand
$poststring = substr($poststring, 0, -1);

$fp = fsockopen($host, $port, $errno, $errstr, $timeout = 30);
if(!$fp)
{
    //error tell us
    echo "$errstr ($errno)<br />\n";
}
else
{
    //send the server request
    fputs($fp, "POST $path HTTP/1.1\r\n");
    fputs($fp, "Host: $host\r\n");
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
    fputs($fp, "Content-length: ".strlen($poststring)."\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $poststring . "\r\n\r\n");
   
    //loop through the response from the server
    while(!feof($fp))
    {
        $output .= fgets($fp, 4096);
    }
    //close fp - we are done with it
    fclose($fp);
}

if (preg_match('/PHPSESSID=(.+?);/', $output, $regs))
{
    $phpsessid = $regs[1];
}

echo "Session: " . $phpsessid . "\n";
flush();

$fp = fsockopen($host, $port, $errno, $errstr, $timeout = 30);
if (!$fp)
{
    //error tell us
    echo "$errstr ($errno)<br />\n";
}
else
{
    fputs($fp, "GET $path HTTP/1.1\r\n");
    fputs($fp, "Host: $host\r\n");
    fputs($fp, "Cookie: PHPSESSID=$phpsessid\r\n");
    fputs($fp, "Connection: Close\r\n\r\n");
   
    //loop through the response from the server
    while (!feof($fp))
    {
        $output .= fgets($fp, 128);
    }
    fclose($fp);
}

echo '<pre>';
echo $output;
echo '</pre>';

?>
Avatar billede jakobdo Ekspert
28. april 2006 - 23:29 #25
Og nu vil jeg ikke hjælpe mere, så håber du har nok til at komme igang nu.
Avatar billede oyoyg Nybegynder
12. maj 2006 - 11:29 #26
Nå, men så må du jo smide et svar..

Tak for hjælpen :)
Avatar billede jakobdo Ekspert
12. maj 2006 - 11:42 #27
Et svar.
Fik du det til at virke?
Avatar billede oyoyg Nybegynder
26. august 2006 - 18:10 #28
Kører bare derud af :)
Avatar billede jakobdo Ekspert
26. august 2006 - 18:29 #29
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester