ich schreib grad einen programm, wo ca 300 threads ca jede 10 secunden ca 1 kb data in einer datei schreiben muessen^^
obwohl python mir keine fehlermeldungen gibt klappt es nicht.
wie muss ich die sache also angehen? (oder ist windoof dafür einfach zu "schwach")
filhandles und vieeele threads
es wird ja alles in einer einzigen datei gescrieben,
vieleicht nochmal genaueres zum prob:
die data wird nur unvolsändig in der datei gescrieben. und ich hab das so gemacht, dass ich für jeden thread einen neuen filehandle aufgemacht wird
vieleicht nochmal genaueres zum prob:
die data wird nur unvolsändig in der datei gescrieben. und ich hab das so gemacht, dass ich für jeden thread einen neuen filehandle aufgemacht wird
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Und wieso brauchst du 300 Threads?
Kann nicht 1 Thread die Daten entgegen nehmen und in die Datei schreiben?
Beschreibe doch dein Problem mal genauer ... Was willst du erreichen und woher stammen die Daten.
Gruss
Kann nicht 1 Thread die Daten entgegen nehmen und in die Datei schreiben?
Beschreibe doch dein Problem mal genauer ... Was willst du erreichen und woher stammen die Daten.
Gruss
ich denke, der quelltext sagt mehr als tausend worte...
(is ziemlich lange her das ichs geschrieben habe, kleinere bugs sind also nicht auszuschliesen)
danke für die mühe
(is ziemlich lange her das ichs geschrieben habe, kleinere bugs sind also nicht auszuschliesen)
Code: Alles auswählen
from time import sleep
import threading
import socket
from urlparse import urlparse
from random import randrange
def mkq():
a = "123a4e56i7a890poiuaieztraeewiaqasdfghjkilmanbevcxy"
ges = ""
for i in range(randrange(5)+3):
ges += a[randrange(len(a[:-1])+1)]
return ges
def rmTwice(resp):
resp = dict(zip(resp, resp)).keys()
return resp
def filter(resp):
index = 0
l1 = []
l2 = []
urls = []
while index is not -1:
index = resp.find('<a class=l', index + 1)
l1.append(index)
l2 = []
for i in range(len(l1)):
index = resp.find('">', l1[i])
l2.append(index)
for i in range(len(l1) - 1): # spaeter nachgicken wegen den -1.......
match = resp[l1[i]:l2[i]].replace('<a class=l href=', '').replace('"', '')
url = urlparse(match)[1]
urls.append(url)
return urls
def scan(resp):
ftps = ""
for host in resp:
try:
s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2.settimeout(1)
s2.connect((host, 21))
resp2 = s2.recv(128)
print host, ":\n", resp2
if resp2: ftps += host + ':\n' + resp2 + '\n--=000000=--\n'
except:
pass
#print "writing in file..."
f.write(ftps)
def google():
global f
f = open('ftpsLog.txt', 'a')
while 1:
jetzt = True
start = 0
B = "foobar"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('www.google.pl', 80))
keyword = mkq()
while 1:
#print "sending google req: GET /search?num=100&start=" + str(start) + "&q=" + keyword + " HTTP/1.1"
s.send("GET /search?num=100&start=" + str(start) + "&q=" + keyword + " HTTP/1.1\n")
s.send('Host: www.google.pl')
s.send('\n\n')
start += 100
resp = ""
while not '</html>' in resp:
resp += s.recv(1024)
resp = filter(resp)
if jetzt:
A = resp[:20]
else:
B = resp[:20]
jetzt = not jetzt
if not A == B:
resp = rmTwice(resp)
#print len(resp), "hosts wurden gefunden"
scan(resp)
else:
start = 0
break
for i in range(1000):
t = threading.Thread(target = google)
t.setDaemon(1)
t.start()
#t.join()
#print "thread wurde gesteratet"
sleep(0.1)
print 'ende mit mking threads'
try:
while 1:
sleep(100)
except:
f.close()
danke für die mühe
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Ist das richtig, dass du einfach 1000 Google-Anfragen mit zufälligen Suchbegriffen die URLs herauslesen willst und dann diese URLs öffnest und den Inhalt in eine Datei speicherst?
Hab ich es richtig verstanden?
Da gibts einige bessere Methoden sowas zu erledigen.
Ich würde jetzt z.B. so machen:
1 Thread, der die Google-Anfragen startet (mit der URL-Lib, nicht mit sockets) und dann die URLs via eine Queue an den 2. Thread schickt und dieser alle URLs öffnet und die Daten in eine Datei speichert.
Dann hast du gerade mal 2 Threads, die dauernd URL-Anfragen starten.
Gruss
Ist das richtig, dass du einfach 1000 Google-Anfragen mit zufälligen Suchbegriffen die URLs herauslesen willst und dann diese URLs öffnest und den Inhalt in eine Datei speicherst?
Hab ich es richtig verstanden?
Da gibts einige bessere Methoden sowas zu erledigen.
Ich würde jetzt z.B. so machen:
1 Thread, der die Google-Anfragen startet (mit der URL-Lib, nicht mit sockets) und dann die URLs via eine Queue an den 2. Thread schickt und dieser alle URLs öffnet und die Daten in eine Datei speichert.
Dann hast du gerade mal 2 Threads, die dauernd URL-Anfragen starten.
Gruss
Ich habe gute Erfahrungen mit Mark Pilgrims PyGoogle gemacht. Damit kannst du aber nicht massenweise Anfragen stellen, sondern bist auf einige Tausend pro Tag beschränkt (mit dem kostenlosen Entwickler-Key).
bezogen auf rayos antwort:
nicht ganz, es sind nicht 1000, sondern 1000 while 1 anfragen die geschickt werden ( ;. danach werden die urls nicht geöffnet (nehme an das du damit http get meinst), sondern der ftp banner wird gelogt. (wobei das erfolgreiche logen des ftp banners nicht mein endziel sondern nur ein zwischenschritt ist)
zwei threads waeren zu wenig und zwei thread gruppen (sozusagen get und scan) waere glaub ich ziemlich schwierig zu organizieren und zu unflexibel
ich krieg jetzt aber in den nächsten tagen endlich mein eigenes pc, wo ich naturlich was *NIXes draufpacke, und nehme an das es dan klappen müsste
edit{
thx
}
nicht ganz, es sind nicht 1000, sondern 1000 while 1 anfragen die geschickt werden ( ;. danach werden die urls nicht geöffnet (nehme an das du damit http get meinst), sondern der ftp banner wird gelogt. (wobei das erfolgreiche logen des ftp banners nicht mein endziel sondern nur ein zwischenschritt ist)
zwei threads waeren zu wenig und zwei thread gruppen (sozusagen get und scan) waere glaub ich ziemlich schwierig zu organizieren und zu unflexibel
ich krieg jetzt aber in den nächsten tagen endlich mein eigenes pc, wo ich naturlich was *NIXes draufpacke, und nehme an das es dan klappen müsste
edit{
hey! natürlich, hatte dies voher irgendwie überlesen, aber so muüsste es eigentlich klappenDas ist nicht gerade eine gute Idee. Kannst du nicht einen Thread machen, der das Filehandle offen hält und die Daten von den anderen Threads entgegennimmt?
thx
}
Das ist der Begrüßungsstring eines FTP-Servers, der in der Regel den Namen und die Version der Serversoftware enthält.rayo hat geschrieben:Was ist ein FTP-Banner?
Wieso genau der in diesem Zusammenhang relevant ist, verschließt sich mir bisher aber.
mist, ich krieg das einfach nicht hin, ich weis nicht wie ich eine variable (die mit den zu schreibende hosts), zwischen allen threads sharen soll. Ich dachte immer ich müsste die variable erst deklarieren und dan in den thread als global setzen, funzt aber nicht. any ideas?
ursprünglich ja, hab diese fase aber schon hinter mir gelassenür was sollte das gut sein? Zum verwundbare Server finden?
eine idee wäre eine klasse mit self.variable...
eine andere, eine liste oder ein dictionairy zu benutzen...
eine andere, eine liste oder ein dictionairy zu benutzen...
http://www.cs.unm.edu/~dlchao/flake/doom/
Die Kommunikation sollte am besten über `Queue.Queue` Objekte abwickeln, die sind threadsafe. Und diese kann man über die `__init__()` Methode an die Threads übergeben.