[C] Bytes x-y aus char-array lesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Original geschrieben von holger_p
    Dringende Nachfrage dazu: Wie komme ich in PHP an die TCP/IP Header Informationen?
    Ich brauche den MTU/MSS Wert aus dem IP Header und die Fenstergröße aus dem TCP Header. Und von PHP habe ich nur wenig Ahnung...
    Ohne es ausprobiert zu haben aber wenn du dir mal die rfcs zu den
    entsprechenden protokollen anschaust oder auch mal in die sourcen
    einen sniffers schaust um die headerstructur herauszufinden, kannst
    du vll was mit raw sockets und unpack machen.

    greets
    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

    Kommentar


    • #17
      Original geschrieben von closure
      Ohne es ausprobiert zu haben aber wenn du dir mal die rfcs zu den
      entsprechenden protokollen anschaust oder auch mal in die sourcen
      einen sniffers schaust um die headerstructur herauszufinden, kannst
      du vll was mit raw sockets und unpack machen.

      greets
      Die Headerstruktur ist bekannt. Darüber gibts reichlich Doku. Die Frage ist nur, wie komme ich an die Header in PHP ran? Es scheint keine Umgebungsvariablen zu geben, wo die Header drin sind, oder?


      Gruß Holger

      Kommentar


      • #18
        Hi,

        gibt es auch nicht. Die einzige möglichkeit die dir bleibt ist packete
        abzufangen. Ich bezweifle jedoch dass das global mit php möglich ist.
        In c geht das recht einfach.
        Schau dir doch mal ne referenzimplementierung zum senden von pings
        in php an. Davon gibts ja einige. Die müssen ja beim empfang auch
        in den header schauen wie die reply ausgefallen ist.

        greets
        (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

        Kommentar


        • #19
          Original geschrieben von closure
          Hi,

          gibt es auch nicht. Die einzige möglichkeit die dir bleibt ist packete
          abzufangen. Ich bezweifle jedoch dass das global mit php möglich ist.
          In c geht das recht einfach.
          Schau dir doch mal ne referenzimplementierung zum senden von pings
          in php an. Davon gibts ja einige. Die müssen ja beim empfang auch
          in den header schauen wie die reply ausgefallen ist.

          greets
          Also verstehe ich das richtig: Man müßte Pakete abfangen? Also am besten den Client zum Pingen zu bewegen? Weil anpingen kann ich ja die Clients schlecht, kaum ein User hinter einem Router ist anpingbar. Das Ganze soll am Ende auf einem normalen Webspace laufen, kann ich da überhaupt Pakete abfagen? Es ist ein ganz normaler Webser, wo meine Seite mit vermutlich einigen 100 anderen Seiten liegt.

          Wo gibts denn die "Referenzimplementierungen" ?


          Gruß Holger

          Kommentar


          • #20
            Original geschrieben von holger_p
            [B]Also verstehe ich das richtig: Man müßte Pakete abfangen? Also am besten den Client zum Pingen zu bewegen? Weil anpingen kann ich ja die Clients schlecht, kaum ein User hinter einem Router ist anpingbar. Das Ganze soll am Ende auf einem normalen Webspace laufen, kann ich da überhaupt Pakete abfagen?
            Nein kannst du nicht so ohne weiteres. Normalerweise kümmert
            sich der kernel bzw. der tcp/ip-stack darum dass auf dem application-layer
            nicht mehr damit hantiert werden muss.

            Ich hab grad mal gegoogled.
            Es scheint ein binding von php zur bekannten libpcap zu geben.

            Hier zu sehen. In wie
            weit das ganze benutzbar ist kann ich nicht sagen.
            Aber die libpcap ist auf jedenfalls das was du willst.
            Um es mal auf den punkt zu bringen, effektiv brauchst du
            einen packetsniffer.

            Vorweg geht das ganze vorhaben generell nur wenn du
            root-access zum server hast auf dem das script läuft.

            Dann könntest du alle packete die am server ankommen lesen
            und die jenigen die an port 80 addressiert sind dann für deine
            zwecke analysieren.


            greets
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar


            • #21
              Original geschrieben von closure
              Nein kannst du nicht so ohne weiteres. Normalerweise kümmert
              sich der kernel bzw. der tcp/ip-stack darum dass auf dem application-layer
              nicht mehr damit hantiert werden muss.

              Ich hab grad mal gegoogled.
              Es scheint ein binding von php zur bekannten libpcap zu geben.

              Hier zu sehen. In wie
              weit das ganze benutzbar ist kann ich nicht sagen.
              Aber die libpcap ist auf jedenfalls das was du willst.
              Um es mal auf den punkt zu bringen, effektiv brauchst du
              einen packetsniffer.

              Vorweg geht das ganze vorhaben generell nur wenn du
              root-access zum server hast auf dem das script läuft.

              Dann könntest du alle packete die am server ankommen lesen
              und die jenigen die an port 80 addressiert sind dann für deine
              zwecke analysieren.


              greets
              Viele Dank für Deine Mühe. Aber ich fürchte, das wird nichts. Natürlich habe ich keinen Root-Access zum Server. Und meine Unix-Kennisse würden auch nicht ausreichen, um da irgendwas nachzuinstallieren oder gar den Kernel neu zu kompilieren.

              Schade eigentlich, es sollte ne deutschsprachige Seite werden, die DSL Usern Ihre TCP/IP Einstellungen anzeigt, damit man sie bei Bedarf korrigieren kann.


              Gruß Holger

              Kommentar


              • #22
                Hallo Closure,

                Original geschrieben von closure

                [...]
                Vorweg geht das ganze vorhaben generell nur wenn du
                root-access zum server hast auf dem das script läuft.

                Dann könntest du alle packete die am server ankommen lesen
                und die jenigen die an port 80 addressiert sind dann für deine
                zwecke analysieren.


                greets
                Könnte man sowas auf einem V-Server machen, auf dem Root Rechte hat? Die gibts schon ab 2,99 im Monat, das ist ja erschwinglich.

                Was für ein Zeitaufwand wäre so eine Funktion, um am Ende die Werte in PHP nutzen zu können? Müßte sowas von jemanden mit mehr Ahnung machen lassen - habe weder von C (ist ja wohl ne C-Bibliothek) noch von Linux Ahnung.


                Gruß Holger

                Kommentar


                • #23
                  Hi,

                  theoretisch sollte das auf nem vserver gehen. Sicher sagen kann ichs dir allerdings
                  nicht. Zum zeitaufwand kann ich nicht viel sagen, da ich, wie schon geschrieben,
                  mit diesem php-pcap-binding keine erfahrung habe.

                  Wenn du allerdings root-access hast könntest du evtl. auch einfach tools benutzen
                  die sowas schon machen bsp. tcp-dump. Und damit dann was basteln.
                  Man könnte ja den user der die anfrage stellt anhand der session-id im http-header
                  erkennen und dann so das entsprechende packet identifizieren.

                  greets
                  (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                  Kommentar


                  • #24
                    Original geschrieben von closure
                    Hi,

                    theoretisch sollte das auf nem vserver gehen. Sicher sagen kann ichs dir allerdings
                    nicht. Zum zeitaufwand kann ich nicht viel sagen, da ich, wie schon geschrieben,
                    mit diesem php-pcap-binding keine erfahrung habe.

                    Wenn du allerdings root-access hast könntest du evtl. auch einfach tools benutzen
                    die sowas schon machen bsp. tcp-dump. Und damit dann was basteln.
                    Man könnte ja den user der die anfrage stellt anhand der session-id im http-header
                    erkennen und dann so das entsprechende packet identifizieren.

                    greets
                    Ist sowas wie tcp-dumb bei Linux dabei? Auf so einem vserver kann man eigene Soft installieren, aber keine eigenen Kernel nutzen.

                    Kann man dann die Ausgaben von so einem Tool dann umlenken und mit PHP auswerten?


                    Gruß Holger

                    Kommentar


                    • #25
                      Hi,

                      bei manchen distris ist tcpdump dabei und wenn nicht kann man es einfach
                      nachinstallieren. Den kernel brauchst du dafür nicht zu patchen.

                      Naja die idee wäre mit tcpdump ankommende packete zu sniffen und dann
                      zu filtern.
                      Du könntest zum beispiel festlegen dass alle packete die auf port 80 ankommen
                      und eine bestimmte seite anfordern, meinetwegen "checkmtu.php" in eine
                      datei gelogged werden. Das php script muss dann diese datei nur öffnen, nach
                      dem packet mit der aktuellen session_id suchen und dann hätte man was man
                      braucht.

                      Ich denke so wäre das machbar.
                      greets
                      (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                      Kommentar

                      Lädt...
                      X