2013-10-24 4 views
0

Я пишу программу, чтобы получить домен на том же сервере, а также сканировать веб-каталог.В этом случае, как я могу написать queue.put

#!/usr/bin/env python 
#encoding = utf-8 
import threading 
import urllib,urllib2,httplib 
from urllib2 import Request, urlopen, URLError 

import Queue,sys 
import re 
concurrent = 5 
url = sys.argv[1] 

class Scanner(threading.Thread): 


    def __init__(self, work_q): 
     threading.Thread.__init__(self) 
     self.work_q = work_q 


    def getdomains(self): 
     doreq = Request('http://www.logontube.com/website/'+ url) 
     response = urlopen(doreq) 
     html = response.read() 
     response.close() 
     domains = re.findall('<br><a href=\"(.*?)\" target=\"_blank\"',html) 
     return domains 

    def run(self): 
     alldomains = self.getdomains() 
     pathline = [line.rstrip() for line in open("path.txt")] 


     while True: 
      for aim in alldomains: 
       for path in pathline: 
        path = self.work_q.get() 

        req = Request(aim+path) 
        try: 
         response = urlopen(req) 
        except URLError, e: 
         if hasattr(e, 'reason'): 
          print aim+path,'Not Found' 
         elif hasattr(e,'code'): 
          print aim+path,'Not Found' 
        else: 
         try: 
          logs = open('log.txt',"a+") 
         except(IOError): 
          print "[x] Failed to create log file" 
         print aim+path,"Found" 
         logs.writelines(aim+path+"\n") 
         logs.close() 

def main(): 


    work_q = Queue.Queue() 
    paths = [line.rstrip() for line in open("path.txt")] 
    for i in range(concurrent): 
     t = Scanner(work_q) 
     t.setDaemon(True) 
     t.start() 

    for path in paths: 
     work_q.put(path) 

    work_q.join() 


main()   

Проблема эта программа только сделать петлю пути, поэтому я только могу получить результат сканирования одного сайта. Я нашел проблему,

for path in paths: 
     work_q.put(path) # The program finishes when it puts all the path 

Если вы хотите, чтобы помочь мне, чтобы проверить эту программу, вам может потребоваться каталог веб-сайта (сохранить его как path.txt)

/default.asp 
/index.asp 
/index.htm 
/index.html 
/index.jsp 
/index.php 
/admin.asp 
/admin.php 
/admin.shtml 
/admin.txt 
/admin_admin.asp 
/config.asp 
/inc/ 
/login.asp 
/login.jsp 
/login.php 
/login/ 
/phpinfo.php 
/readme.txt 
/robots.txt 
/test.asp 
/test.html 
/test.txt 
/test.php 
/news/readme.txt 
/addmember/ 

ответ

0

Вам нужно a:

while 1: 
    pass 

или что-то, что ждет, пока ваши потоки не будут завершены, а затем выйдет.

Что происходит, так это то, что вы начинаете темы, но заканчиваете основной поток, чтобы никогда не видеть результаты ваших потоков.

+0

Я вижу результат, но он не является полным. программа не делает цикл «для цели в альдомах», я получил результат только первой цели. – user2876146

+0

Ну, что такое ценность альдомов? 'Print alldomains' Сколько доменов там? – jramirez

+0

количество alldomains зависит от url = sys.argv [1], это количество веб-сайта на том же сервере. – user2876146

Смежные вопросы