Christian: Unbekannte Dateien auf Server mittles socket ausfindig machen

Hallo,

hatte hier gestern gefragt, wie man mit PHP testen kann, ob eine Datei auf einem Server existiert. Danke für die Antworten (bes. Tom).
Das klappt gut mit fsockopen und HEAD Request.

Aber nun noch mal zu der Sache:

Problem ist folgendes:
Eine Seite stellt jeden Tag zu einer festen Uhrzeit Artikel mit einem Bild ins Netz. Die Bilddatei entspricht einem bestimmten Schema, und beinhaltet zusätzlich eine 6stellige Zufallszahl (weil man das Bild eigentlich nicht vor erscheinen des Artikels sehen soll; in der Vergangenheit konnte man das, weil die Bild-URL da einfach zu ermitteln war).

Die Bilder sind, wie man weiß, schon einige Stunden früher (also so am Vorabend) hochgeladen, bevor der Artikel, in dem die Bilder angezeigt werden, online ist.
Ich wollte nun versuchen die URL dieses Bildes, das in dem jeweiligen morgigen Artikels drin ist, rauszufinden.

Dazu hab ich mir das Schema der Datei genommen und wollte versuchen alle Bilder auf Existenz zu prüfen (in einer Schleife von 100000 bis 999999).
Also etwa so:
for($i = 100000; $i < 999999; $i++)
{
   if(validate_url("http://......../bild$i.jpg"))
   {
      echo $i;
      break;
   }
}

validate_url sieht ganz grob so aus (von php.net):
$socket = @fsockopen($host, $port, $errno, $errstr, 30);
if (!$socket)
{
  return(false);
}
else
{
  fwrite ($socket, "HEAD ".$documentpath." HTTP/1.0\r\nHost:
  $host\r\n\r\n");
  $http_response = fgets( $socket, 22 );

if ( ereg("200 OK", $http_response, $regs ) )
  {echo "HTTP-Response: $http_response<br>";
  return(true);
  fclose( $socket );
  } else
  {
  echo "HTTP-Response: $http_response<br>";
  return(false);
  }
}

Technisch funktioniert das auch.

Jetzt meine Frage: darf man so was? Es ist ja eigentlich ziemlich einfach. Fällt so was unter Internetspionage. ist das ein Hackerangriff? Kann man für sowas rechtlich belangt werden?

Ich richte damit ja keinen Schaden an, sondern möchte nur Informationen wenige Stunden früher bekommen als vorgesehen. Das dient auch nur privaten Zwecken. Da sind keine wirtschaftlichen Absichten hinter. Rein aus privatem Interesse.

Wäre nett, wenn ihr was dazu wisst!

Gruß
Christian

  1. Hallo,

    Jetzt meine Frage: darf man so was?

    IMHO: nein.

    Fällt so was unter Internetspionage.

    Eher nicht, die Daten sind ja nicht besonders geschützt (kein Passwort o.ä.). "Ausspähen von Daten" dürfte daher IMHO nicht erfüllt sein, aber ich bin kein Anwalt.

    ist das ein Hackerangriff? Kann man für sowas rechtlich belangt werden?

    Das könnte als Denial-of-Service-Angriff aufgefasst werden und dieser dürfte vmlt. unter »Computersabotage« fallen, was strafbar ist.

    Unabhängig davon, ob das nun erlaubt ist, oder nicht: Der Anbieter will offensichtlich nicht, dass die Bilder vorher schon zugänglich sind, respektiere das doch bitte. Außerdem: würdest Du es als toll empfinden, wenn irgendjemand auf Deinem Webserver unnötig viel Traffic verursacht? (jede HTTP-HEAD-Anfrage verursacht mindetens 2 KiB Traffic; wenn Du 899999 Anfragen stellst, sind das 1,72 GiB (!) Traffic - und wenn Du das dreißig Tage im Monat machst, sind das 51,5 GiB Traffic - nur durch Dein Script).

    Viele Grüße,
    Christian

    1. Hi,

      wieso verursacht jede HEAD anfrage 2+ KB?? Das kommt mir so viel vor.

      Was steckt denn da alles drin?
      Er schreibt doch nur das:
      fwrite ($socket, "HEAD ".$documentpath." HTTP/1.0\r\nHost: $host\r\n\r\n");

      Dann noch was: Wenn ich viele solcher Anfragen stelle, was wird genau übertragen, insbesondere Informationen von mir. HTTP_USER_AGENT und so auch?
      Und wird das alles irgendwo in den log-Files des Servers des Anbieters gespeichert? Also etwa so:

      Request auf ...../bild123123.jpg, Response: failed
      Request auf ...../bild123124.jpg, Response: failed

      so dass er sehen kann, das jemand versucht hat, da etwas rauszufinden.
      (so ähnlich halt.)

      Gruß
      Christian

      Hallo,

      Jetzt meine Frage: darf man so was?

      IMHO: nein.

      Fällt so was unter Internetspionage.

      Eher nicht, die Daten sind ja nicht besonders geschützt (kein Passwort o.ä.). "Ausspähen von Daten" dürfte daher IMHO nicht erfüllt sein, aber ich bin kein Anwalt.

      ist das ein Hackerangriff? Kann man für sowas rechtlich belangt werden?

      Das könnte als Denial-of-Service-Angriff aufgefasst werden und dieser dürfte vmlt. unter »Computersabotage« fallen, was strafbar ist.

      Unabhängig davon, ob das nun erlaubt ist, oder nicht: Der Anbieter will offensichtlich nicht, dass die Bilder vorher schon zugänglich sind, respektiere das doch bitte. Außerdem: würdest Du es als toll empfinden, wenn irgendjemand auf Deinem Webserver unnötig viel Traffic verursacht? (jede HTTP-HEAD-Anfrage verursacht mindetens 2 KiB Traffic; wenn Du 899999 Anfragen stellst, sind das 1,72 GiB (!) Traffic - und wenn Du das dreißig Tage im Monat machst, sind das 51,5 GiB Traffic - nur durch Dein Script).

      Viele Grüße,
      Christian

      1. Hallo,

        wieso verursacht jede HEAD anfrage 2+ KB?? Das kommt mir so viel vor.

        Naja, es wandern ja 3 TCP/IP-Pakete für den Verbindungsaufbau über die Leitung. 24 Byte ist ein IP-Header groß, ebenso der TCP-Header. Das sind also 3 * (24 + 24) Bytes, also 144 Bytes alleine für den Verbindungsaufbau. Für Deine HEAD-Anfrage hast Du dann weitere 48 Bytes für die IP + TCP Header (schon 192 Bytes) und dann Deinen Inhalt:

        HEAD /bla/blub/images/123456.jpg HTTP/1.0##Host: www.example.com####

        Das wären 68 Bytes (bei obigem Beispiel, plusminus ein paar zerquetschte), da sind wir also schon bei 260 Bytes nur für die Anfrage. Der Server antwortet wieder (Header wieder 48 Bytes, also 308). Eine typische Antwort sei hier mal gegeben:

        [ 17] HTTP/1.1 200 OK
        [ 37] Date: Thu, 13 Jan 2005 16:26:23 GMT
        [ 98] Server: Apache/1.3.32 (Unix)  (Gentoo/Linux) mod_auth_pgsql/0.9.12 PHP/4.3.10 mod_gzip/1.3.26.1a
        [ 35] Cache-Control: public, max-age=60
        [ 40] Expires: Thu, 13 Jan 2005 16:27:23 GMT
        [ 46] Last-Modified: Thu, 13 Jan 2005 16:24:22 GMT
        [ 19] Connection: close
        [ 40] Content-Type: text/html; charset=UTF-8

        (Quelle: < http://forum.de.selfhtml.org/cgi-bin/http_trace.pl?url=http%3A%2F%2Fforum.de.selfhtml.org%2F&method=HEAD&version=HTTP%2F1.0>)

        Die Zahlen links geben die Größe der jeweiligen Zeile inklusive Zeilenende-Zeichen an. Addiert sind diese 332 Bytes. Wir hätten damit schon 640 Bytes. Die Verbindung muss dann wieder geschlossen werden, wieder 3 Pakete, wieder 144 Bytes, also wären das 784 Bytes. Ok, das sind nicht ganz ein Kibibyte, allerdings rühren die 2 Kibibyte, die ich angegeben hatte, auch von Werten her, die durch Browser generiert werden, die einen ganzen Rattenschwanz an Headern noch mitsenden. Trotzdem, wenn Du mit 784 Bytes rechnest, kommst Du bei 899999 Anfragen pro Tag immer noch auf 672,9 MiB und damit immer noch auf 19,7 GiB pro Monat. Sind zwar keine 50, aber immerhin schon ganz ordentlich.

        Dann noch was: Wenn ich viele solcher Anfragen stelle, was wird genau übertragen, insbesondere Informationen von mir. HTTP_USER_AGENT und so auch?

        Nein, nur das, was Du sendest, also den Pfad und den Host:-Header.

        Und wird das alles irgendwo in den log-Files des Servers des Anbieters gespeichert? Also etwa so:

        Request auf ...../bild123123.jpg, Response: failed
        Request auf ...../bild123124.jpg, Response: failed

        Naja, das Logfile sieht zwar anders aus, aber der Anbieter kann genau diese Informationen erfahren. Zusätzlich steht im Logfile noch die IP-Adresse und wenn er Dich anzeigt, kann ein Gericht unter Umständen von Deinem Provider verlangen, den Kunden hinter dieser IP-Adresse preiszugeben.

        Viele Grüße,
        Christian

        1. Dank für die ausführlich Antwort! Werd mich mal näher mit beschäftigen vielleicht.

  2. Hej Christian,

    genau hier wurde das letzte Woche schonmal besprochen, wen ich dich recht verstanden habe ist das die gleiche Frage, die cih auch hatte:

    </archiv/2005/1/t98112/>

    Beste Grüße
    Biesterfeld

    --
    Selfcode:
    fo:| br:> n4:? ie:{ mo:} va:} de:] zu:| fl:| ss:| ls:]