automatische google-suchabfragen

Code-Stücke können hier veröffentlicht werden.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

automatische google-suchabfragen

Beitragvon Costi » Samstag 17. März 2007, 02:45

ich denke die letzten zeilen sagen ueber die funktionalitaet alles:

Code: Alles auswählen

for host in Host_list():
   print host


und achtung!: an sich ist das automatische senden von requests an google - auser mit ihrer api - "verboten". dieser scripts ist nur fuer "educational purporses" gedacht.


Code: Alles auswählen

import re
import socket
import threading

from time import sleep
from random import choice, randint



class Host_list(object):
   """"
   beim iterieren dieser klasse (= sowas wie "for stift in federtasche: anspitzen(stift)":), werden web-server addressen zuruekgegeben
   
   """
   def __init__(self):
      self.hosts = []
      self.page = 0
      self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      self.socket.connect(('www.google.com', 80))
      self.page = 0
      self.old_hosts = []
      self.keyword = self._mk_keyword()
      self.exhausted = 0
      self.regex = re.compile('h2 class=r><a href="\w*://([^"]*)" class=l>')
      
   def _mk_keyword(self):
      """generiert zufaelige strings, die als suchwort fuer google benutzt werden
      """
      vocals = 'aeiou'
      other_chars = 'qrtpsdfghjklcvbnm'
      keyword = ''
      for i in range(randint(2,6)):
         if randint(0,3):
            keyword += choice(vocals)
         else:
            keyword += choice(other_chars)
      return keyword
   
   def _get_hosts(self):
      """gibt die hosts einer google seite zurueck und veraendert wenn noetig den suchwort und das seitenindex"""
      hosts = self._parse(self._google_get())
      
      #die zwei ersten hosts werden auf gleichheit uebrprueft um festzustellen, ob wir diese seite nicht schon das letzte mal hatten
      if self.old_hosts == hosts[:3]:
         
         self.keyword = self._mk_keyword()
         self.page = 0
         self.exhausted += 1
         
         #es kann sein dass google keine suchergebnisse mehr sendet
         #und uns bitet etwas was in ein bildechen zu sehen ist in einen feld  manuel einzugeben
         #in diesen fall sagen wir den uns iterierenden was auch immer, dass schon alle elemente durchgereicht wurden
         if self.exhausted >= 10:
            raise StopIteration      
      else:
         self.page += 1
         self.exhausted = 0         
      self.old_hosts = hosts[:3]
      return hosts
      
   def _google_get(self):
      """
      returnt googles antwort (in raw http) auf einer suchanfrage mit self.keyword als suchwort und self.page als seitenzahl
      """      
      #print '\t',(self.page, self.keyword)
      self.socket.send("""GET /search?start=%s&q=%s&num=100 HTTP/1.1
Host: www.google.com

""" % (self.page*100, self.keyword))
      resp = ''
      while True:
         chunk = self.socket.recv(2048)
         if '</HTML>' in chunk.upper():
            break
         resp += chunk
      return resp
   
   def _parse(self, stri):
      """
      filtert die suchergebnisse aus googles antwort und gibt sie in einer liste zurueck
      """
      hosts = self.regex.findall(stri)
      
      #das koennte man auch in der regex erledigt haben (nur wie?)
      hosts =  [host.split('/', 1)[0] for host in hosts]
      
      #doppelte hosts werden entfernt
      hosts = dict(zip(hosts, hosts)).keys()
      
      return hosts
   
   def __iter__(self):
      """beim iterrieren wird diese klasse selbst zurueggegeben,
      so wird das zuruegebene wert von next() jeweils als akuelles element genomen
      """
      return self
   
   def next(self):
      """gibt einen host aus self.hosts zurueck wenn self.hosts leer ist, fuellt es sich wieder auf,
      wobei statt eine if, eien while schleifen benutzt werden musste, da self._get_hosts() nicht immer hosts zurueckgibt"""
      while not self.hosts:
         [self.hosts.append(i) for i in self._get_hosts()]
      return self.hosts.pop()
   



if __name__ == "__main__":
   for host in Host_list():
      print host


Zuletzt geändert von Costi am Samstag 17. März 2007, 14:34, insgesamt 4-mal geändert.
cp != mv
BlackJack

Beitragvon BlackJack » Samstag 17. März 2007, 08:17

Die letzten Zeilen sagen alles!? Ich habe beim ersten drüberlesen über diesen undokumentierten Quelltext nicht verstanden was das soll. Da werden irgendwie zufällige Suchwörter generiert und dann Google damit belästigt!? Das wäre ja schon fast eine DOS-Attacke.
Benutzeravatar
Michael Schneider
User
Beiträge: 566
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Beitragvon Michael Schneider » Samstag 17. März 2007, 13:08

BlackJack hat geschrieben:Die letzten Zeilen sagen alles!? Ich habe beim ersten drüberlesen über diesen undokumentierten Quelltext nicht verstanden was das soll. Da werden irgendwie zufällige Suchwörter generiert und dann Google damit belästigt!? Das wäre ja schon fast eine DOS-Attacke.


Genau das waren auch meine Gedanken, in der Reihenfolge. Aber bedenke: "for educational purposes"! ;-)

Costi, der Code sieht schonmal beeindruckend aus, aber könntest Du bitte "die letzten Zeilen" für die ganz Begriffsstutzigen unter uns in einem Satz zusammenfassen?

Vielen Dank,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Samstag 17. März 2007, 14:30

ok, ich habs fuer euch bis zur letzten variable ausdukomentiert :lol:

edit:
verdammt, "Host_list" ist vieleicht etwas eindeutig, koennet doch auch "hoste eine liste" bedeuten?
cp != mv
BlackJack

Beitragvon BlackJack » Samstag 17. März 2007, 15:28

Äh, ich bin ehrlich gesagt nicht viel schlauer. Wozu soll das gut sein? Ein Beitrag für "der blödsinnigste Weg von Google gesperrt zu werden"?

Der Quelltext ist grauenvoll, die Dokumentation zum schreiend weglaufen und der Code kann in einer Endlosschleife oder Ausnahme enden, wenn man Pech hat. Eines von beidem wird passieren, wenn das HTML-Tag in der ``while True:``-Schleife sich zufällig auf zwei `chunk`\s verteilt.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Samstag 17. März 2007, 16:40

Hi Costi

Anstatt die while True schleife kannst du einfach im HTTP-Header die Content-Length auslesen und so lange empfangen bis diese erreicht wurde.

Gruss
Benutzeravatar
Michael Schneider
User
Beiträge: 566
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Re: automatische google-suchabfragen

Beitragvon Michael Schneider » Samstag 17. März 2007, 17:53

Hallo Costi,

ich würde Dir sehr gern ein paar Tips geben, wie Du die gewünschten Infos mit einem Bruchteil des Codes sicherer bekommst, aber solange ich nicht weiß, WARUM Du das eigentlich machst...

Versteh mich nicht falsch, ich möchte Dir nichts unterstellen. Vielleicht weißt Du auch gar nicht, was Du da eigentlich machst, aber es wirkt ... sehr suspekt.

Costi hat geschrieben:

Code: Alles auswählen

         #es kann sein dass google keine suchergebnisse mehr sendet
         #und uns bitet etwas was in ein bildechen zu sehen ist in einen feld  manuel einzugeben

Nette Erfindung, was? :lol:
Diese Spielverderber...

Costi hat geschrieben:

Code: Alles auswählen

      #doppelte hosts werden entfernt
      hosts = dict(zip(hosts, hosts)).keys()

Doofe Frage: warum verwendest Du nicht gleich ein Dictionary? Da kann man zum einen ausschließen, dass doppelte Hosts eingetragen werden und zusätzlich noch nette Zusatzinfos speichern.

Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Sonntag 18. März 2007, 00:43

Code: Alles auswählen

ich würde Dir sehr gern ein paar Tips geben, wie Du die gewünschten Infos mit einem Bruchteil des Codes sicherer bekommst, aber solange ich nicht weiß, WARUM Du das eigentlich machst...


hmmm, kug dir mal http://www.python-forum.de/topic-7352.html?highlight= an
da hatte ich exakt die selbe idee (zieht euch mal die filter() rein), wie du diehst sind meine fortschritte eher programmiertechnischer art. :lol:

und ja, ich will diese hosts nach primitiven sicherheitsluecken durchsuchen und dann irgendwelche 1337 exploits benutzen

ich dachte ich haete diese unuetzlichen ideen hinter mir. "hacken" selbst ist ja ok, aber nicht auf so einer weise - wie die werbung im fernsher auf einfacher und bunter weise root remote-shell mit wenig arbeit -.


ueber weitere tips um mein Host_list zu verbessern wuerde ich mich aber sehr freuen (funktionieren tuts ja schon.....(:)
cp != mv
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 18. März 2007, 10:49

Hallo Costi!

Ich hätte große Lust, dich aus dem Python-Forum raus hauen zu lassen. Wenn da nicht die Möglichkeit wäre, dass du dich dann unter einem anderen Namen anmeldest.

Wir sollen dich also dabei unterstützen bzw. dabei zusehen, wie du friedlich vor sich hin arbeitende Server scannst...? Den Admins mehr arbeit zu machen, die Kosten für das Hosting zu erhöhen, Sicherheitslöcher zu finden und evt. auszunützen? (Das "evt." könnte ich mir sparen. Denn wer sich so weit vorarbeitet, nützt gefundene Sicherheitslücken auch aus. Das ist, wie einem verdurstenden Menschen ein Glas Wasser vor die Nase zu stellen und zu sagen, dass er das Wasser nicht drinken darf, da er damit gegen das Gesetz verstößt.)

Hacken ist wie das ungefragte, unerwünschte Eindringen in mein Haus oder in meine Wohnung. Keiner will so etwas. Es ist etwas anderes, wenn der Hauseigentümer darum bittet, um z.B. die Sicherheit zu überprüfen. Aber da du Hostadressen sammelst, hat dich KEINER darum gebeten. Du bist also wie der ungebetete, unerwünschte Einbrecher, der die Wohnung oder das Haus entehrt.

Du brauchst nicht antworten. Wir könnten die Wahrheit nicht von der Lüge unterscheiden. Jede Begründung könnte gelogen sein.

Von mir kannst du aber sicher keine Hilfe erwarten. Und ich hoffe, dass andere deine Gründe ebenfalls hinterfragen.

Jetzt ist noch Zeit dazu: Lasse es! Suche dir eine ehrenvollere Beschäftigung!

Schreib z.B. einen Reportgenerator mit wxPython, mit dem Berichte mit Kopfzeile, Fußzeile, Gruppierungen usw. erstellt werden können. Den dazugehörenden Berichtdesigner nicht vergessen, so dass man die Berichte ohne Änderung am Quellcode erstellen und anpassen kann. Z. B. so etwas wie http://reportman.sourceforge.net/ aber plattformunabhängig, in Python mit wxPython.

:cry:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lunar

Beitragvon lunar » Sonntag 18. März 2007, 13:50

Costi hat geschrieben:und ja, ich will diese hosts nach primitiven sicherheitsluecken durchsuchen und dann irgendwelche 1337 exploits benutzen

Such dir eine paar Freunde, die dir diesen Mist ausreden...

Costi hat geschrieben:ueber weitere tips um mein Host_list zu verbessern wuerde ich mich aber sehr freuen (funktionieren tuts ja schon.....(:)

Deine Absichten haben meine Hilfe nicht verdient...
BlackJack

Beitragvon BlackJack » Sonntag 18. März 2007, 16:30

Ich habe ähnliche Ansichten wie Gerold zu dem Thema. Ich sehe das mit dem Hacken und grundsätzlichem, zwingendem Ausnutzen von Exploits nicht ganz so.

Aber selbst wenn ich hier keine bösen Absichten annehme, sehe ich bei dem "Basteldrang", gepaart mit dem wirklich kruden Code die Gefahr, dass der hauptsächliche Schaden einfach durch Unfähigkeit und Beharrlichkeit angerichtet wird.

Google hat eine sehr gute Netzanbindung und offensichtlich Gegenmassnahmen für massenhafte automatische Abfragen eingeplant, aber die Rechner, die dann auf Grund der Suchergebnisse als nächstes "dran" sind, werden vielleicht von zuhause über ISDN angebunden oder der Besitzer muss für Netzwerkverkehr bezahlen und ist kein millionenschweres Börsenunternehmen. Da fängt's dann an asozial zu werden.

Das mich irgend welche Skriptkiddies scannen wollen während ich, teilweise beruflich, am IP-telefonieren bin, nervt echt kolossal.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Sonntag 18. März 2007, 18:31

ich sehe auch ein das diese tat unnsinig und evtl schaedigent ist
das problem ist nur, dass ich den computer nur wochenends benutzen will/darf und ich dan dass, was ich verpasse wohl mit "krasseren" sachen kompensieren will

sicher ist das keine rechtfertigung aber ausser die eventuelen normalen nebenwirkugen eines buffer owerflows (je nachdem was sich finden laest) sehe ich keine gefahr.
denn sogar ein einbrecher hat seine moralischen prinzipien und versucht so wenig aufruhr wie moeglich zu verursachen
cp != mv
BlackJack

Beitragvon BlackJack » Sonntag 18. März 2007, 19:21

Ich würde sagen Du hast noch nie ein Haus oder eine Wohnung gesehen, wo Einbrecher alles auseinandergenommen haben um ja nichts wertvolles zu übersehen. Jedes Schrankfach, jede Schublade, jedes Behältnis geöffnet und ausgeleert, alles mitten in die Räume. Das ist kein unübliches Vorgehen wenn sicher ist, dass die Bewohner beispielsweise im Urlaub sind.

Und wie gesagt, ich finde das echt extrem nervtötend wenn meine VoIP-Verbindung anfängt zu stottern weil mich irgendwer mit sinnlosen IP-Paketen bombardiert.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Sonntag 18. März 2007, 20:24

hmmm ok, sicher sind fremde *.logs und cgi-scripts nicht ganz uninteresannt . meine motivation ist aber nicht eigentum zu stehlen, sondern nur in ein fremdes haus zu gelangen. Und danach auch gleich wieder zu verschwinden - hoechstens noch sechnell ein zettel mit einen hinweis aud das schlechte schloss hinterlegen -.
cp != mv
lunar

Beitragvon lunar » Sonntag 18. März 2007, 20:28

Costi hat geschrieben:hmmm ok, sicher sind fremde *.logs und cgi-scripts nicht ganz uninteresannt . meine motivation ist aber nicht eigentum zu stehlen, sondern nur in ein fremdes haus zu gelangen. Und danach auch gleich wieder zu verschwinden - hoechstens noch sechnell ein zettel mit einen hinweis aud das schlechte schloss hinterlegen -.


Mmmh, wie fändest du es denn, wenn du nach Hause kommst und irgendeine wildfremde Person in deinem Wohnzimmer auf der Couch liegen siehst, die spöttisch mit eine Dietrich rumwedelt und dich auf die miese Qualität deines Türschlosses hinweist?
Selbst wenn du es Ernst meinst und wirklich andere Leute auf ihre undichten Stellen aufmerksam machen möchtest, gibt dir das noch lange nicht das Recht, fremde Server zu hacken... Der Zweck heiligt in diesem Fall eben nicht die Mittel.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder