Avatar billede s.mortensen Nybegynder
04. januar 2005 - 21:42 Der er 13 kommentarer

Hvordan snyder jeg en server til at tro at mit fopen() kald fra

Hvordan snyder jeg en server til at tro at mit fopen() kald fra PHP er en browser...
Kaldet skal også indeholde en referrer som jeg selv sætter til et eller andet...

HVad skal jeg gøre inden jeg kører min fopen("http://....... ?
Avatar billede coderdk Praktikant
04. januar 2005 - 21:47 #1
Det tror jeg ikke du kan, du er nok nødt til at bruge sockets, og selv "bygge" dit request til webserveren.
Avatar billede s.mortensen Nybegynder
04. januar 2005 - 21:48 #2
jeg kan ikke få PHP til at tilføje et eller andet til HTTP headeren inden jeg gør det?
Det er vel det der ska ltil ik? altså nogle headers der skal være sat til et eller andet for at det ligner en browser?
Avatar billede coderdk Praktikant
04. januar 2005 - 21:59 #3
Du kan nok ikke gøre det med fopen...
Her er et eksempel:

$host = "www.google.dk";
$sti = "/";
$referer = "http://www.example.dk/";
if ( $fp = fsockopen( $host, 80, $en, $es, 10 ) )
{
  fwrite( $fp, "GET $sti HTTP/1.0\r\nHost: www.google.dk\r\nReferer: $referer\r\nConnection: close\r\n\r\n" );
  while ( !feof( $fp ) )
  {
      echo fread( $fp, 1024 );
  }
  fclose( $fp );
}
Avatar billede coderdk Praktikant
04. januar 2005 - 22:00 #4
Skulle nok have været:


$host = "www.google.dk";
$sti = "/";
$referer = "http://www.example.dk/";
if ( $fp = fsockopen( $host, 80, $en, $es, 10 ) )
{
  fwrite( $fp, "GET $sti HTTP/1.0\r\nHost: $host\r\nReferer: $referer\r\nConnection: close\r\n\r\n" );
  while ( !feof( $fp ) )
  {
      echo fread( $fp, 1024 );
  }
  fclose( $fp );
}
Avatar billede s.mortensen Nybegynder
04. januar 2005 - 22:35 #5
Så langt så godt... men jeg får stadig ikek lov til at hente... jeg får en 403 side tilbage... Jeg tror at det er fordi at serveren også kigger om der sendes browser information med i kaldet...

Kan du hjælpe mig med at sende det med også?
Jeg accepterer svaret ligemeget hva!
Avatar billede coderdk Praktikant
04. januar 2005 - 22:49 #6
Denne emulerer en internet explorer 6 på XP:

$host = "www.google.dk";
$sti = "/";
$referer = "http://www.example.dk/";
$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
if ( $fp = fsockopen( $host, 80, $en, $es, 10 ) )
{
  fwrite( $fp, "GET $sti HTTP/1.0\r\nHost: $host\r\nReferer: $referer\r\nUser-Agent: $useragent\r\nConnection: close\r\n\r\n" );
  while ( !feof( $fp ) )
  {
      echo fread( $fp, 1024 );
  }
  fclose( $fp );
}
Avatar billede s.mortensen Nybegynder
04. januar 2005 - 22:53 #7
hehe tak... jeg fandt selv løsningen i mellemtiden...

MEN:
da det er .jpg filer jeg vil hente og gemme i en xxx.jpg fil hvor jeg selv giver filerne numre 001.jog, 002.jpg osv... så er det lidt skidt at jeg får header information med tilbage i det jeg henter og skriver direkte ned i en .jpg fil...

Filen er således ikek en jpg fil længere..

hvis jeg åbner en af filerne i notepad, så ser den således ud:
HTTP/1.1 200 OK
Date: Tue, 04 Jan 2005 21:39:04 GMT
Server: Apache/1.3.26 (Unix) PHP/4.3.10
Last-Modified: Wed, 29 Dec 2004 11:45:57 GMT
ETag: "e5d76-17b0-41d298f5"
Accept-Ranges: bytes
Content-Length: 6064
Connection: close
Content-Type: image/jpeg

ÿØÿà JFIF  H H  ÿÛ C ... fortsætter ...
Avatar billede coderdk Praktikant
04. januar 2005 - 23:04 #8
$host = "www.google.dk";
$sti = "/";
$referer = "http://www.example.dk/";
$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
if ( $fp = fsockopen( $host, 80, $en, $es, 10 ) )
{
  fwrite( $fp, "GET $sti HTTP/1.0\r\nHost: $host\r\nReferer: $referer\r\nUser-Agent: $useragent\r\nConnection: close\r\n\r\n" );
  $cont = '';
  while ( !feof( $fp ) )
  {
      $cont .= fread( $fp, 1024 );
  }
  fclose( $fp );
}

preg_match( "/\r?\n\?\n(.*)/", $cont, $m );

$cont = $m[1]; // Nu er filen i $cont
Avatar billede coderdk Praktikant
04. januar 2005 - 23:05 #9
Autoimageleechers rock ;)
Avatar billede s.mortensen Nybegynder
04. januar 2005 - 23:16 #10
hmmmm det får jeg bare tomme filer ud af... er du sikker på at dit pattern er korrekt?
Avatar billede coderdk Praktikant
05. januar 2005 - 00:18 #11
hehe nej, jeg sov vist, den bør nok være:

preg_match( "/\r?\n\r?\n(.*)/s", $cont, $m );
Avatar billede s.mortensen Nybegynder
05. januar 2005 - 00:29 #12
er lige ved at fodre min søn... kigger omlidt...
Avatar billede s.mortensen Nybegynder
05. januar 2005 - 00:45 #13
mange tak... så virker skidtet, og ja autoimageleeching styrer ;)
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