automatische google-suchabfragen

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

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

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: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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: 545
Registriert: Donnerstag 17. August 2006, 14:21

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

Ä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:

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: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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: 545
Registriert: Donnerstag 17. August 2006, 14:21

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: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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

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

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: 545
Registriert: Donnerstag 17. August 2006, 14:21

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

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: 545
Registriert: Donnerstag 17. August 2006, 14:21

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

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.
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

zuerst empoert und erschroken ihm verfluchen aber im nachhinein wurde ich mich bedanken dass er nichts kaputt gemacht hat und gluecklich sein das er statt irgendein "rm *"ler den unsicheren schloss zuerst endeckt hat
cp != mv
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Costi hat geschrieben:zuerst empoert und erschroken ihm verfluchen aber im nachhinein wurde ich mich bedanken dass er nichts kaputt gemacht hat und gluecklich sein das er statt irgendein "rm *"ler den unsicheren schloss zuerst endeckt hat
Ein unsicheres Schloss muss man nicht entdecken - es ist einfach da. Ich habe in einem Haus eine Tür gesehen, die dreimal schwerer ist als ich und deren Wucht sicherlich Knochen mit Leichtigkeit brechen kann [1]. Seit dieser Tür gelten bei mir alle anderen Türen als Pappe. Möchtest du also alle möglichen Leute einladen, deine Tür einzutreten?

[1] Das die Fenster wesentlich weniger gesichert sind, steht auf einem eigenem Blatt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Costi hat geschrieben:im nachhinein wurde ich mich bedanken dass er nichts kaputt gemacht hat
Und dann kümmerst du dich um deine verschreckte Freundin oder Frau, die wochenlang nicht mehr ruhig schlafen kann, da ihr das Gefühl der Sicherheit genommen wurde. Immer wieder wacht sie auf, da sie geträumt hat, dass ein Einbrecher neben ihr steht und sie anstarrt.

Schade, denn jetzt brauchst du eine Alarmanlage, verstärkte Türen und verstärkte Fenster. Das ist alles nicht billig. Nicht zu vergessen, die Waffe, die du dir jetzt zulegst, denn du rechnest jederzeit damit, dass ein besserer Hacker deinen Server knackt und Einsicht in vertrauliche Informationen bekommt. Dein Projekt, an dem du jahrelang gearbeitet hast könnte gestolen werden. Jemand könnte behaupten, dass er das Projekt erstellt hat und du verlierst deinen Job, da du jahrelang gearbeitet hast, ohne ein Ergebnis vorzeigen zu können...

Es gibt aber auch eine andere Seite:

Der Großteil der Websites ist nicht schützenswert. Wenn irgendwelche Daten verloren gehen, dann spielt man ein Backup ein und die Sache ist gegessen. Einbruchversuche eines selbst ernannten Robin Hood's machen den Webspace nur teurer.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Momentmomentmoment, habe ich das richtig verstanden? Du meinst, Du erweist irgendwem einen gefälligen Dienst, wenn Du Hacken befürwortest, in fremde Server einbrichst, Kosten, Mehraufwand usw. verursachst??? :shock: Ich glaub ich spinne!

Mal was philosophisches:
Hast Du eine Ahnung, warum es Schlösser an Türen gibt? Weil irgendwann mal jemand reinging, wo er nicht reingehen durfte.
Und warum gibt es Einbrecher? Weil es immer wieder Leute gibt, die sagen, ich mache es trotzdem.

Ich halte keinen Einbrecher für ehrenvoll! LASST DEN SCH... ENDLICH SEIN!

Davon abgesehen ist das unerlaubte und unerwünschte Eindringen in Wohnungen und Server in Deutschland ein Straftatbestand. Aber das hat ja Gerold schon mit dem Glas Wasser angedeutet.

Auch wenn es mich unbeliebt macht, aber auch ich bin der Meinung, dass solche Praktiken hier weder diskutiert noch geplant werden sollten, das wirft (im günstigsten Fall) ein schlechtes Licht auf dieses Forum. Und ich bin froh, dass ich nix dazu geschrieben habe.

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
lunar

Auch wenn es mich unbeliebt macht, aber auch ich bin der Meinung,
Wieso unbeliebt? Es ist eher Costi, der sich Gedanken um seine Beliebtheit in diesem Forum machen sollte... gerold wollte ihn ja immerhin schon aussperren. Ich glaube, mit deiner Meinung stehst du hier "voll im Mainstream". Meine Stimme hast du...
dass solche Praktiken hier weder diskutiert noch geplant werden sollten, das wirft (im günstigsten Fall) ein schlechtes Licht auf dieses Forum.
...wenn du mir jetzt noch erklären kannst, wieso das der "günstigste Fall" ist... Imho ist sowas ziemlich katastrophal, soll dieses Forum doch ein ernsthaftes Entwickler-Forum sein, und nicht irgend ein Hinterhof-Diskussionforum für Skriptkiddies und solche, die es noch werden wollen. Wobei ich es auch wieder respektabel finde, dass die absolute Mehrheit hier Costis Absichten komplett ablehnt und verurteilt...
Antworten