Ergebnis 1 bis 7 von 7
  1. #1
    Kevin Mitnick
    Registriert seit
    03.06.2009
    Beiträge
    1.033

    Standard string aus URL suchen

    Hallo,
    Ich suche eine Moeglichkeit dass das Programm auf eine URL geht und auf der Website nach einem bestimmten string sucht.
    Hat jemand eine Idee welche Bibliothek/Header was auch immer so eine Moeglichkeit bereitstellt?



  2. #2
    Trojaner
    Registriert seit
    09.07.2008
    Beiträge
    57

    Standard

    Das dürfte dir helfen : Winsock Tutorial: Grundlagen und TCP

  3. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Cristhecrusader (04.08.2010)

  4. #3

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Da gibt es etliche Möglichkeiten.
    Du kannst dir dazu mal Sockets, WinInet, libcurl, boost.regex bzw. die C++ Stringfunktionen ansehen.

  5. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Cristhecrusader (04.08.2010)

  6. #4
    Der `Toastflüsterer` Avatar von AlterHacker
    Registriert seit
    27.09.2008
    Beiträge
    690

    Standard

    Folgendes benötigst du:
    Irgendwie eine Methode, Sockets zu benutzen. Ganz komfortabel:
    C++ Socket Class for Windows
    Dann musst du dich mit dem Webserver verständigen:
    Hypertext Transfer Protocol – Wikipedia
    Und finally, deine Ausgabe auf der Seite finden:[Ganz simpel]
    strstr - C++ Reference

    Ggf kannst du echt noch regexp etc anschauen falls du das benötigst.

    Security is an illusion.
    Cheater : 8=o
    Normaluser : 8=======o
    Ich : 8================o

    BM: (4|2|0)

  7. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Cristhecrusader (04.08.2010)

  8. #5
    Michelangelo Virus
    Registriert seit
    14.06.2007
    Beiträge
    282

    Standard

    Da tuts auch schon die WinApi!
    Einfachen HttpRequest mit "Get" als Paramter an die gewünschte Seite. Als Antwort erhältst du den Seitenquelltext der Seite, den du dann nach belieben nach dem String untersuchen kannst.

    Hier die entsprechenden Functions aus WinInet:

    InternetOpen
    InternetConnect
    HttpOpenRequest
    HttpSendRequest
    InternetReadFile

    Gruß

    zao
    Write the code correctly and it will compile

  9. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Cristhecrusader (05.08.2010)

  10. #6
    Kevin Mitnick
    Registriert seit
    03.06.2009
    Beiträge
    1.033

    Standard

    Danke fuer all die Antworten werd mich da dann mal ransetzen, seid echt top



  11. #7
    Das Leben ist der Lehrer Avatar von DoS
    Registriert seit
    18.08.2008
    Beiträge
    528

    Standard

    Guten Tag ,
    zwar ist BlackBerry derzeit nicht da, aber ich weiß, dass er sich darüber aufregen würde, wenn ich jetzt einen für C++ kompletten,schnell kopierbaren Source poste. Deswegen habe ich das heute auf eine andere Weise gemacht. Weil ich Perl cool finde, gibt es die Lösung in Perl. Den Code wird auch ein C++ler (ungefähr) verstehen. Da jetzt endlich der Ursprung der Sockets die Berkeley Socket API ist, sind bei der Verwendung von Sockets also keine großen Unterschiede.

    Heißt auf gut Deutsch: Wenn du mit C++ ein Programm schreiben möchtest, dass den Inhalt einer Website mittels Sockets runterlädt, dann hilft Folgendes weiter ( habe den Quellcode auch meiner Meinung nach schön kommentiert ; ich empfehle außerdem den kommentierten Quellcode in einen (syntaxhervorhebenden) Editor zu kopieren und auf "Vollbild" anzugucken. Dann hat man einen besseres Überblick ) :

    (Achtung: Hier werden die Backslashs (" \ ") nicht angezeigt. In dem Code in den Code-Tags unten schon)
    PHP-Code:
    #!/usr/bin/perl -w
    use Socket;
    use 
    IO::Handle;
    use 
    strict;

    #1.) Der erste Teil dient dazu, dass der Websitename eingelesen wird und entsprechend brauchbar gemacht wird.
    print "Bitte geben Sie die zu durchsuchende Website in der Form \"www.Website.de/../\" ein\n";
    my $seite = <>;
    chomp $seite;
    print 
    "Bitte geben Sie den Suchbegriff ein\n";
    my $begriff = <>;
    chomp $begriff;
    my $mHost $seite;
    my $mPfad $seite;

    #Die Filterung wird hier mit regulären Ausdrücken gelöst. Man kann das natürlich auch anders machen.
    #Wichtig ist nur, dass $mHost später den Wert in der Form (www.)adresse.de besitzt. Die Unterverzeichnisse
    #, also website.de/.../..., dürfen nicht dabei stehen (auch nicht http:// am Anfang)
    #$mPfad sollte nur die Verzeichnisstruktur enthalten, also von dem obigen Beispiel dann "/.../...".
    #Achtung: Der reguläre Ausdruck ist verfälscht, da hier keine Backslashs angezeigt werden.
    #Siehe unkommentierten Quellcode.
    $mHost =~ s/(http\:\/\/)?((www\.)?[a-z0-9\-\.]+)\/?([a-z0-9\.\-\/\=\&\_\?\+\%\:]*)/$2/i;
    $mPfad =~ s/(http\:\/\/)?(www\.)?[a-z0-9\-\.]+\/?([a-z0-9\.\-\/\=\&\_\?\+\%\:]*)/$3/i;

    #2.)Hier, im zweiten Teil, wird es nun interessanter. In diesem Schritt wird ein Socket aufgebaut
    # und dazu benutzt um ein Request abzuschicken.
    my $port getservbyname ("http""tcp");                    #Hier wird der Port ("http" steht sozusagen für einen Port)
                                                                 # und das Transportprotokoll in der Variable $port festgehalten.
    my $ziel sockaddr_in($portinet_aton ("$mHost"));         #In dieser Zeile wird mit "inet_aton" der Hostname (IP geht auch) in eine Vierergruppenschreibweise gepackt,
                                                                 # die von sockaddr_in genutzt wird. "sockaddr_in" macht aus den $port und $ip Angaben eine wichtige Host/Port-Struktur,
                                                                 #die wir später brauchen. Diese wird in der Variable "$ziel" gespeichert.
    socket (SOCKAF_INETSOCK_STREAMgetprotobyname ("tcp")); #"AF_INET" sagt aus, dass es sich um ein TCP/IP Socket handelt. SOCK_STREAM sorgt dafür,
                                                                 #dass das Socket ein Stream Socket wird. Das brauchen wir für unsere TCP Verwendung
                                                                 #(Guck dir den Unterschied zwischen TCP und UDP an, dann verstehst du warum für TCP meistens Stream-Sockets genutzt werden).
                                                                 #Mit "getprotobyname()" wird das Transportprotokoll in einen geeigneten  Integer(Ganzzahl) umgewandelt.
    connect (SOCK$ziel);                                       #Jetzt haben wir alles was wir brauchen: Los geht's :D. Wir stellen jetzt die Verbindung her. :)
    SOCK->autoflush (1);                                         #Wir schalten noch schnell die Pufferung aus, weil unser Request sofort abgeschickt werden soll.

    #3.) Jetzt kommt der dritte Teil. Das Request wird abgeschickt und die Antworten empfangen.
    #Das eigentliche Request ist Folgendes: "GET /$mPfad HTTP/1.1 \r\nHost: $mHost\r\nConnection: close\r\n\r\n"
    #Wir teilen dem Server mit, welche Datei wir denn jetzt von dem Server downloaden möchten. Das tuen wir
    #mit dem GET Befehl. Außerdem müssen wir unsere verwendete HTTP Version mitteilen (es gab/gibt auch HTTP in Version 1.0).
    #Natürlich teilen wir dem Server auch mit, von welchem Host wir die Datei verlangen :).
    #Die bisher angegebenen Sachen sind die notwendigen in HTTP 1.1.
    #Was ist das, warum ist da noch mehr? Ganz einfach, weil wir nach der Antwort vom Server
    #keine Verbindung mehr brauchen. Deswegen können wir auch gleich unsere einfache Schleife nutzen. 
    # :) Mit "\r\n" werden die Attribute getrennt und mit "\r\n\r\n"
    #schließlich das Ende des Requests signalisiert.
    #Mehr zum Lesen gibt es natürlich in dem entsprechenden RFC.
    print SOCK "GET /$mPfad HTTP/1.1 \r\nHost: $mHost\r\nConnection: close\r\n\r\n";

    #Solange die Antwort übersandt wird, werden die Daten der Varible $data zugeführt.
    my $data;
    my $line;
    while (
    $line = <SOCK>) {
       
    $data "$data$line";
    }

    close(SOCK); # Socket schließen

    #4.) Überprüfung der empfangenen Daten auf das Schlüsselwort (ist es enthalten oder nicht).
    if($data=~/$begriff/)
    {
        print 
    "Der Begriff \"$begriff\" wurde gefunden \n";
    }
    else
    {
        print 
    "Der Begriff \"$begriff\" wurde nicht gefunden \n";
    }

    #Das war es. Ich hoffe ich konnte dir helfen :) 
    Hier der kommentierte Code in Code Tags. Zum Kopieren für den Editor geeignet (hier wird es richtig angezeigt):

    Hier noch einmal der unkommentierte Quellcode:
    Code:
    #!/usr/bin/perl -w 
    use Socket; 
    use IO::Handle; 
    use strict;
    
    print "Bitte geben Sie die zu durchsuchende Website in der Form \"www.Website.de/../\" ein\n";
    my $seite = <>;
    chomp $seite;
    print "Bitte geben Sie den Suchbegriff ein\n";
    my $begriff = <>;
    chomp $begriff;
    my $mHost = $seite;
    my $mPfad = $seite;
    
    $mHost =~ s/(http\:\/\/)?((www\.)?[a-z0-9\-\.]+)\/?([a-z0-9\.\-\/\=\&\_\?\+\%\:]*)/$2/i;
    $mPfad =~ s/(http\:\/\/)?(www\.)?[a-z0-9\-\.]+\/?([a-z0-9\.\-\/\=\&\_\?\+\%\:]*)/$3/i;
    
    my $port = getservbyname ("http", "tcp");                    
    my $ziel = sockaddr_in($port, inet_aton ("$mHost"));         
    socket (SOCK, AF_INET, SOCK_STREAM, getprotobyname ("tcp")); 
    connect (SOCK, $ziel);                                       
    SOCK->autoflush (1);                                         
    
    print SOCK "GET /$mPfad HTTP/1.1 \r\nHost: $mHost\r\nConnection: close\r\n\r\n";
    
    my $data;
    my $line;
    while ($line = <SOCK>) { 
       $data = "$data$line";
    }
    close(SOCK); 
    
    if($data=~/$begriff/)
    {
        print "Der Begriff \"$begriff\" wurde gefunden \n";
    }
    else
    {
        print "Der Begriff \"$begriff\" wurde nicht gefunden \n";
    }

    Viel Spaß damit .

    Mit freundlichen Grüßen
    DoS

    P.S. Nehmt es mir nicht übel, dass ich den Quellcode in PHP Tags gepackt habe. Ich wollte, dass die Kommentare zur besseren Übersicht hervorgehoben werden (außerdem ist es ja auch eine Scriptsprache ).


    Geändert von DoS (07.08.2010 um 07:45 Uhr)
    Legende: "Gruß" = kaum Zeit, "MfG." = durchschnittlich viel Zeit und "Mit freundlichen Grüßen" = viel Zeit
    gehabt beim Posten.


    Folgende Personen genießen meine Hochschätzung: BlackBerry, EBFE, DizzY_D, OpCodez, l0dsb und H4x0r007.

  12. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    luxury11 (06.09.2010)

Ähnliche Themen

  1. STL String und cin.get
    Von DoS im Forum C, C++
    Antworten: 3
    Letzter Beitrag: 16.08.2009, 15:06
  2. [C#] String.Remove
    Von cocacola im Forum .NET Sprachen - Techniken
    Antworten: 5
    Letzter Beitrag: 13.07.2009, 22:20
  3. [VB.NET] Nach String suchen
    Von PCFX im Forum .NET Sprachen - Techniken
    Antworten: 11
    Letzter Beitrag: 28.06.2009, 22:47
  4. Vb.net String
    Von CYSER im Forum .NET Sprachen - Techniken
    Antworten: 3
    Letzter Beitrag: 24.03.2009, 10:25
  5. [VB.NET-Snippet] Quelltext auslesen und nach string suchen
    Von c00p3r im Forum .NET Sprachen - Techniken
    Antworten: 1
    Letzter Beitrag: 14.07.2008, 22:25

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •