1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Приветствуем вас,Гость, на форуме IFUD.WS. Обязательно рекомендуется к прочтению правила форума http://ifud.ws/threads/obnovleno-pravila-foruma.7759

[Python] Shock Spider WebSite 1.1

Тема в разделе "Программирование", создана пользователем sokoleonardo, 16 янв 2017.

Метки:
  1. TopicStarter Overlay
    sokoleonardo

    sokoleonardo

    Регистрация:
    22 окт 2016
    Сообщения:
    4
    Симпатии:
    3
    Привет!
    A Spider program in Python that I created some time ago.

    What it does is to go through an entered web and find all the links of other sites, the own links of the same web and the emails.

    It saves the result in folders organized with the name of the website and files.
    Код:
    #!/usr/bin/python
    # -*- coding: cp1252 -*-
    
    # shocksws.py                                                                                        #
    ######################################################################################################
    #
    #     ### #  # #### #### #  #   ### #### ### ###  #### ####   ###   ### ####  ###  ### ### ##### ####
    #    #   #  # #  # #    #  #   #   #  #  #  #  # #    #  #    #     #  #     #  # #    #    #   #
    #   ### #### #  # #    ###    ### ####  #  #  # ##   ###      # # #   ##    ###  ###  #    #   ##
    #    # #  # #  # #    # #      # #     #  #  # #    #  #      # #    #     #  #   #  #    #   #
    # ### #  # #### #### #  #   ### #    ### ###  #### #  #      # #    ####  ###  ### ###   #   ####
    #              By Sokoleonardo
    ######################################################################################################
    
    import urllib;
    import urllib2;
    import re;
    import os.path;
    import os;
    import sys;
    import time;
    
    patron_enlaceweb = re.compile("\
    href=\"?\
    (\
    ((https?://|(mailto:)([0-9A-Za-z_.#-]+@)?)([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|[0-9A-Za-z_.-]+))?\
    ([/0-9A-Za-z._-]+)?\
    (\?[&;0-9A-Za-z=%_.-]+)?\
    )\
    ");
    
    patron_mail = re.compile("\
    [0-9A-Za-z_.#-]+@\
    [0-9A-Za-z._-]+\.[A-Za-z]{2,}\
    ");
    
    patron_protohttp = re.compile("^https?://");
    
    patron_www = re.compile("^www\.");
    
    patron0 = re.compile("[?/]");
    
    patron_dirnull = re.compile("/$");
    
    
    print "\
    |---------------------------------------------------------|\n\
    |              Shock Spider WebSite 1.1                   |\n\
    |---------------------------------------------------------|\n\
    |          Copyright (C) Sokoleonardo 2014                |\n\
    |---------------------------------------------------------|\n\
    | Proposito: Buscar todos los enlaces dentro de un enlace |\n\
    | y leerlos para encontrar: cuentas de e-mails y enlaces  |\n\
    | a otros sitios.                                         |\n\
    | No me hago responsable del uso indebido por parte del   |\n\
    | usuario sin etica. Este programa fue creado con un fin  |\n\
    | intelectual. Ideal para que un webmaster capture los    |\n\
    | enlaces o correos indeseados en su web.                 |\n\
    |---------------------------------------------------------|";
    
    if not (sys.version_info[0] > 1 and sys.version_info[1] > 5):
       print "\
    | Tu interprete de python es una version menor a 2.6.     |\n\
    | Puedes necesitar una version mayor o igual a a 2.6 para |\n\
    | que exista el tiempo de espera tolerado para una        |\n\
    | solicitud (15 seg), para asi reconocer una pagina caida.|\n\
    |---------------------------------------------------------|"
    
    #estas seran las extensiones que se leeran para buscar enlaces en internet
    leer_ext = ["htm", "html", "php", "xml", "text", "txt", "asp", "aspx"];
    
    useragent = {"User-Agent":"Mi nave"}
    
    pathfiles = "text sites" #Si no existe se creara.
    
    timeoutval = 3;
    max_retry = 3;
    
    patron_htmlcharref = re.compile("(&#(\d{1,3});?)");
    def decode_entity_html(htmlCode):
        for htmlcharref in patron_htmlcharref.findall(htmlCode):
            if int(htmlcharref[1]) < 256:
                htmlCode = htmlCode.replace(htmlcharref[0], chr(int(htmlcharref[1])) );
    
        return htmlCode;
    
    def SplitProto(url):
        if not "://" in url:
            #se usara el protocolo por defecto, http
            return ("http://", url);
    
        parts = url.split("://");
    
        return (parts[0]+"://", parts[1]);
    
    
    def GetComponenteUrl(url):
        """Acorta la url dejando componentes de la url (directorio, archivo, parametros)
        Ejemplo: http://example.com/dir/file.asp -> /dir/file.asp"""
    
        #sacamos el protocolo
        url = SplitProto(url)[1];
    
        partes = url.split("/", 1);
        if len(partes) > 1:
            #tiene directorio o archivo
            return ("/" + partes[1], partes[0]);
    
        partes = url.split("?", 1);
        if len(partes) > 1:
            #tiene parametros
            return ("/?" + partes[1], partes[0]);
    
        return ("/", url);
    
    def GetHostUrl(url):
        """http://example.com/componente.txt  -->  example.com"""
    
        url = UrlNormal(url);
       
        url = GetComponenteUrl(url)[1];
    
        return url;
    
    def GetTimeLocalStr():
        t = time.localtime();
    
        return "%d/%02d/%02d - %02d:%02d:%02d" % (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec)
    
    def LeerUrl(pag):
        print "> Conectando con el sitio...";
        req = urllib2.Request(url=pag, headers=useragent);
        if sys.version_info[0] > 1 and sys.version_info[1] > 5:
            #desde python 2.6 se puede usar el timeout al usar urlopen
            web = urllib2.urlopen(url=req, timeout=timeoutval);
        else:
            web = urllib2.urlopen(url=req);
    
        print "> Leyendo el recurso: %s" % GetComponenteUrl(pag)[0];
    
        code = web.read();
    
        web.close();
    
        return code;
    
    
    def UrlNormal(url):
        """Esta funcion convierte la cadena que representa un enlace, en una cadena
        mas adecuada para este programa"""
       
        proto, url = SplitProto(url);
           
        url = patron_www.sub("", url);
    
        url = patron_dirnull.sub("", url);
    
        return (proto + url);
    
    
    def IsUrlVisitable(ext):
        "Esta funcion verifica que el enlace sean paginas webs y no archivos raros o binarios"
       
        if not ext or ext in leer_ext:
            return 1;
    
        return 0;
    
    
    def IsUrlIguales(url_a, url_b):
        "Esta funcion verifica que un enlace sea igual a otro enlace."
        url_a = UrlNormal(url_a);
        url_b = UrlNormal(url_b);
    
        if url_a.upper() == url_b.upper():
            return 1;
    
        return 0;
    
    
    def UrlIsSite(url, site):
        """Esta funcion verifica que dos enlaces sean de sitios iguales.
        Es decir, por ejemplo, si es verdad que www.example.com es igual a example.com/directory (son iguales los sitios)"""
    
        url = patron_protohttp.sub("", url);
        url = patron_www.sub("", url);
    
        site = patron_protohttp.sub("", site);
        site = patron_www.sub("", site);
    
        url = patron0.split(url)[0];
        site = patron0.split(site)[0];
    
        if url.upper() == site.upper():
            return 1;
    
        return 0;
    
    
    def UrlGetExtension(url):
        url = "href=" + url;
       
        archivo = patron_enlaceweb.findall(url)[0][3];
       
        return os.path.splitext(archivo)[1].replace(".", "");
    
    
    def ExtraerUrls(urlWeb, codeWeb):
        """Esta funcion devuelve los enlaces que se encontraron al leer un enlace.
        Devuelve los enlaces de esa misma web, y los enlaces agenos a esa web, ademas
        tambien devuelve los e-mails en la web"""
       
        res_refenlaces = patron_enlaceweb.findall(codeWeb);
    
        codeWeb = decode_entity_html(codeWeb);
       
        res_emails = patron_mail.findall(codeWeb);
       
        enlaces_agenos = [];
        enlaces_propios = [];
        for res in res_refenlaces:
            if not res[0]:
                #enlace nulo, pasamos al siguiente enlace
                continue;
    
            if res[3] and res[4] and res[5]:
                #se encontro el protocolo "mailto:", entonces el enlace es un e-mail
                #ya no se necesita seguir con esta iteracion del bucle, pasamos a la siguiente iteracion
                continue;
           
            enlace = [res[0]];
    
            #agregamos la extension del archivo del enlace, en la informacion del enlace
            ext = os.path.splitext(res[6])[1];
            ext = ext.replace(".", "");
            enlace.append(ext);
           
            if not res[1]:
                #no hay dominio en el enlace, por lo que apunta a un archivo local
                enlace[0] = urllib.basejoin(urlWeb, res[6]+res[7]);
    
            enlace[0] = UrlNormal(enlace[0]);
            #remplazar ampersand por & en el enlace
            enlace[0] = enlace[0].replace("&amp;", "&");
            #La cadena debe finalizar al tener > o " (&gt; o &quot;)
            enlace[0] = re.split("&(gt|quot);", enlace[0])[0];
           
            if UrlIsSite(enlace[0], urlWeb):
                if not enlace in enlaces_propios:
                    enlaces_propios.append(enlace);
            else:
                if not enlace in enlaces_agenos:
                    enlaces_agenos.append(enlace);
    
        return (enlaces_propios, enlaces_agenos, res_emails);
    
    
    def ExtraerUrlsRecursiva(urlWeb, debug=1):
    
        urlWeb = UrlNormal(urlWeb);
       
        ext = UrlGetExtension(urlWeb);
       
        enlaces_propios = [[urlWeb, ext]];
        enlaces_agenos = [];
        emails_lista = [];
    
        for enlace in enlaces_propios:
    
            if not IsUrlVisitable(enlace[1]):
                print "> El formato %s se ignora." % enlace[1].upper();
                continue;
           
            if debug:
                print "> Buscando enlaces en: \"%s\"" % enlace[0];
    
            retrys = 0;
            while retrys < max_retry:
                try:
                    code = LeerUrl(enlace[0]);
                    break;
                except:
                    retrys += 1;
                    print "> Error al tratar de leer la pagina.\n> Esperando 5 segundos para reintento %d/%d..." % (retrys,max_retry);
                    time.sleep(5);
                   
            if retrys == max_retry:
                print "> La pagina %s no se encontrara disponible." % enlace[0];
                continue;
           
            eps, eas, emails = ExtraerUrls(urlWeb, code);
           
            for ep in eps:
                if not ep in enlaces_propios:
                    if debug:
                        print "> Encontrado: <enlace propio> \"%s\"" % ep[0];
                    enlaces_propios.append(ep);
    
            for ea in eas:
                if not ea in enlaces_agenos:
                    if debug:
                        print "> Encontrado: <enlace ageno> \"%s\"" % ea[0];
                    enlaces_agenos.append(ea);
    
            for mail in emails:
                if not mail in emails_lista:
                    print "> E-Mail encontrado: %s" % mail;
                    emails_lista.append(mail);
    
            print "> ";
    
        return (enlaces_propios, enlaces_agenos, emails_lista);
    
    url = raw_input("\n Introduce el enlace de internet: ");
    
    eps, eas, emails = ExtraerUrlsRecursiva(url, debug = False);
    
    save = False;
    
    try:
        #grabamos todo el resultado
        pathfiles = pathfiles + "/" + GetHostUrl(url) + "/" ;
    
        if(not os.path.exists(pathfiles)):
            os.makedirs(pathfiles);
    
        pathfiles = pathfiles + GetHostUrl(url) + ".txt";
    
        fw = file(pathfiles, "a");
        fw.write("Busqueda terminada: "+ GetTimeLocalStr()+"\n\n");
        fw.write("Enlaces agenos encontrados:\n");
    
        if not eas:
            fw.write("-Ninguno.\n");
           
        for e in eas:
            fw.write(" "+e[0]+"\n");
    
        fw.write("\nEnlaces propios encontrados:\n")
    
        if not eps:
            fw.write("-Ninguno.\n");
           
        for e in eps:
            fw.write(" "+e[0]+"\n");
    
        fw.write("\nE-mails encontrados:\n")
    
        if not emails:
            fw.write("-Ninguno.\n");
    
        for e in emails:
            fw.write(" "+e+"\n");   
           
        fw.close();
    
        save = True;
    except:
        print "> Error al grabar archivo:";
    
    
    
    print "\n\
    |---------------------------------------------------------|\n\
    |                Busqueda terminada                       |\n\
    |---------------------------------------------------------|\n"
    
    print "Enlaces agenos encontrados:";
    
    if not eas:
        print "-Ninguno.";
    
    for e in eas:
        print " "+e[0];
    
    print "\nEnlaces propios encontrados:";
    
    if not eps:
        print "-Ninguno.";
    
    for e in eps:
        print " "+e[0];
    
    print "\nE-mails encontrados:";
    
    if not emails:
        print "-Ninguno.";
    
    for e in emails:
        print " "+e;
    
    if save:
        print "\nResultados grabados en: " + pathfiles;
    
    raw_input("\n>Presiona enter para finalizar.");
    
    Bye!
     
    • Like Like x 2
    Метки:
  2. Stealth.X

    Stealth.X

    Регистрация:
    26 июл 2012
    Сообщения:
    315
    Симпатии:
    249
    hi
    can you coding in python ?
     
  3. TopicStarter Overlay
    sokoleonardo

    sokoleonardo

    Регистрация:
    22 окт 2016
    Сообщения:
    4
    Симпатии:
    3
    Yes, it's a very easy language
     
  4. Stealth.X

    Stealth.X

    Регистрация:
    26 июл 2012
    Сообщения:
    315
    Симпатии:
    249
    Can you write for us some script for money ?
     
  5. TopicStarter Overlay
    sokoleonardo

    sokoleonardo

    Регистрация:
    22 окт 2016
    Сообщения:
    4
    Симпатии:
    3
    Mmm ... I do not know, I could try and help you if I know how to do what you want.
     

Поделиться этой страницей

Загрузка...