[Java] Class DH Tools 0.2

Iniciado por BigBear, Enero 15, 2016, 12:22:38 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Enero 15, 2016, 12:22:38 PM Ultima modificación: Febrero 27, 2016, 12:37:14 PM por ANTRAX
Mi primer clase en Java , se llama DH Tools y tiene las siguientes opciones :

  • Realizar una peticion GET y guardar el contenido
  • Realizar una peticion POST y guardar el contenido
  • Crear o escribir archivos
  • Leer archivos
  • Ejecutar comandos y leer su respuesta
  • HTTP FingerPrinting
  • Leer el codigo de respuesta de una URL
  • Borrar repetidos en un ArrayList
  • Cortar las URL en un ArrayList a partir del query
  • Split casero xD
  • Descargar archivos
  • Capturar el archivo de una URL
  • URI Split
  • MD5 Encode
  • MD5 File
  • Get IP

    El codigo de la clase :

    Código: java

    // Class : DH Tools
    // Version : 0.2
    // (C) Doddy Hackman 2015
    // Functions :
    //
    //public String toma(String link)
    //public String tomar(String pagina, String data)
    //public void savefile(String ruta, String texto)
    //public String read_file(String ruta)
    //public String console(String command)
    //public String httpfinger(String target)
    //public Integer response_code(String page)
    //public ArrayList repes(ArrayList array)
    //public ArrayList cortar(ArrayList array)
    //public String regex(String code, String deaca, String hastaaca)
    //public Boolean download(String url, File savefile)
    //public String extract_file_by_url(String url)
    //public String uri_split(String link, String opcion)
    //public String md5_encode(String text)
    //public String md5_file(String file)
    //public String get_ip(String hostname)
    //
    package dhtools;

    import java.io.*;
    import java.net.*;
    import java.nio.channels.Channels;
    import java.nio.channels.ReadableByteChannel;
    import java.util.ArrayList;
    import java.util.Scanner;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import java.security.*;

    public class DH_Tools {

        public String toma(String link) {
            String re;
            StringBuffer conte = new StringBuffer(40);
            try {
                URL url = new URL(link);
                URLConnection nave = url.openConnection();
                nave.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
                BufferedReader leyendo = new BufferedReader(
                        new InputStreamReader(nave.getInputStream()));
                while ((re = leyendo.readLine()) != null) {
                    conte.append(re);
                }
                leyendo.close();
            } catch (Exception e) {
                //
            }
            return conte.toString();
        }

        public String tomar(String pagina, String data) {
            // Credits : Function based in http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/
            String respuesta = "";

            try {
                URL url_now = new URL(pagina);
                HttpURLConnection nave = (HttpURLConnection) url_now.openConnection();

                nave.setRequestMethod("POST");
                nave.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");

                nave.setDoOutput(true);
                DataOutputStream send = new DataOutputStream(nave.getOutputStream());
                send.writeBytes(data);
                send.flush();
                send.close();

                BufferedReader leyendo = new BufferedReader(new InputStreamReader(nave.getInputStream()));
                StringBuffer code = new StringBuffer();
                String linea;

                while ((linea = leyendo.readLine()) != null) {
                    code.append(linea);
                }
                leyendo.close();
                respuesta = code.toString();
            } catch (Exception e) {
                //
            }
            return respuesta;
        }

        public void savefile(String ruta, String texto) {

            FileWriter escribir = null;
            File archivo = null;

            try {

                archivo = new File(ruta);

                if (!archivo.exists()) {
                    archivo.createNewFile();
                }

                escribir = new FileWriter(archivo, true);
                escribir.write(texto);
                escribir.flush();
                escribir.close();

            } catch (Exception e) {
                //
            }
        }

        public String read_file(String ruta) {
            String contenido = null;
            try {
                Scanner leyendo = new Scanner(new FileReader(ruta));
                contenido = leyendo.next();
            } catch (Exception e) {
                //
            }
            return contenido;
        }

        public String console(String command) {
            String contenido = null;
            try {
                Process proceso = Runtime.getRuntime().exec("cmd /c " + command);
                proceso.waitFor();
                BufferedReader leyendo = new BufferedReader(
                        new InputStreamReader(proceso.getInputStream()));
                String linea;
                StringBuffer code = new StringBuffer();
                while ((linea = leyendo.readLine()) != null) {
                    code.append(linea);
                }
                contenido = code.toString();
            } catch (Exception e) {
                //
            }
            return contenido;
        }

        public String httpfinger(String target) {

            String resultado = "";

            //http://www.mkyong.com/java/how-to-get-http-response-header-in-java/
            try {

                URL page = new URL(target);
                URLConnection nave = page.openConnection();

                String server = nave.getHeaderField("Server");
                String etag = nave.getHeaderField("ETag");
                String content_length = nave.getHeaderField("Content-Length");
                String expires = nave.getHeaderField("Expires");
                String last_modified = nave.getHeaderField("Last-Modified");
                String connection = nave.getHeaderField("Connection");
                String powered = nave.getHeaderField("X-Powered-By");
                String pragma = nave.getHeaderField("Pragma");
                String cache_control = nave.getHeaderField("Cache-Control");
                String date = nave.getHeaderField("Date");
                String vary = nave.getHeaderField("Vary");
                String content_type = nave.getHeaderField("Content-Type");
                String accept_ranges = nave.getHeaderField("Accept-Ranges");

                if (server != null) {
                    resultado += "[+] Server : " + server + "\n";
                }
                if (etag != null) {
                    resultado += "[+] E-tag : " + etag + "\n";
                }
                if (content_length != null) {
                    resultado += "[+] Content-Length : " + content_length + "\n";
                }

                if (expires != null) {
                    resultado += "[+] Expires : " + expires + "\n";
                }

                if (last_modified != null) {
                    resultado += "[+] Last Modified : " + last_modified + "\n";
                }

                if (connection != null) {
                    resultado += "[+] Connection : " + connection + "\n";
                }

                if (powered != null) {
                    resultado += "[+] Powered : " + powered + "\n";
                }

                if (pragma != null) {
                    resultado += "[+] Pragma : " + pragma + "\n";
                }

                if (cache_control != null) {
                    resultado += "[+] Cache control : " + cache_control + "\n";
                }

                if (date != null) {
                    resultado += "[+] Date : " + date + "\n";
                }
                if (vary != null) {
                    resultado += "[+] Vary : " + vary + "\n";
                }
                if (content_type != null) {
                    resultado += "[+] Content-Type : " + content_type + "\n";
                }
                if (accept_ranges != null) {
                    resultado += "[+] Accept Ranges : " + accept_ranges + "\n";
                }

            } catch (Exception e) {
                //
            }

            return resultado;

        }

        public Integer response_code(String page) {
            Integer response = 0;
            try {
                URL url = new URL(page);
                URLConnection nave1 = url.openConnection();
                HttpURLConnection nave2 = (HttpURLConnection) nave1;
                nave2.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
                response = nave2.getResponseCode();
            } catch (Exception e) {
                response = 404;
            }
            return response;
        }

        public ArrayList repes(ArrayList array) {
            Object[] listando = array.toArray();
            for (Object item : listando) {
                if (array.indexOf(item) != array.lastIndexOf(item)) {
                    array.remove(array.lastIndexOf(item));
                }
            }
            return array;
        }

        public ArrayList cortar(ArrayList array) {
            ArrayList array2 = new ArrayList();
            for (int i = 0; i < array.size(); i++) {
                String code = (String) array.get(i);
                Pattern regex1 = null;
                Matcher regex2 = null;
                regex1 = Pattern.compile("(.*?)=(.*?)");
                regex2 = regex1.matcher(code);
                if (regex2.find()) {
                    array2.add(regex2.group(1) + "=");
                }
            }
            return array2;
        }

        public String regex(String code, String deaca, String hastaaca) {
            String resultado = "";
            Pattern regex1 = null;
            Matcher regex2 = null;
            regex1 = Pattern.compile(deaca + "(.*?)" + hastaaca);
            regex2 = regex1.matcher(code);
            if (regex2.find()) {
                resultado = regex2.group(1);
            }
            return resultado;
        }

        public Boolean download(String url, File savefile) {
            // Credits : Based on http://stackoverflow.com/questions/921262/how-to-download-and-save-a-file-from-internet-using-java
            // Thanks to Brian Risk
            try {
                URL download_page = new URL(url);
                ReadableByteChannel down1 = Channels.newChannel(download_page.openStream());
                FileOutputStream down2 = new FileOutputStream(savefile);
                down2.getChannel().transferFrom(down1, 0, Long.MAX_VALUE);
                down1.close();
                down2.close();
                return true;
            } catch (IOException e) {
                return false;
            }
        }

        public String extract_file_by_url(String url) {
            return url.substring(url.lastIndexOf('/') + 1);
        }

        public String uri_split(String link, String opcion) {
            String resultado = "";
            try {
                URL url = new URL(link);
                if (opcion == "protocol") {
                    resultado = url.getProtocol();
                } else if (opcion == "authority") {
                    resultado = url.getAuthority();
                } else if (opcion == "host") {
                    resultado = url.getHost();
                } else if (opcion == "port") {
                    resultado = String.valueOf(url.getPort());
                } else if (opcion == "path") {
                    resultado = url.getPath();
                } else if (opcion == "query") {
                    resultado = url.getQuery();
                } else if (opcion == "filename") {
                    resultado = url.getFile();
                } else if (opcion == "ref") {
                    resultado = url.getRef();
                } else {
                    resultado = "Error";
                }

            } catch (Exception e) {
                //
            }
            return resultado;
        }

        public String md5_encode(String text) {
            // Credits : Based on http://www.avajava.com/tutorials/lessons/how-do-i-generate-an-md5-digest-for-a-string.html
            StringBuffer string_now = null;
            try {
                MessageDigest generate = MessageDigest.getInstance("MD5");
                generate.update(text.getBytes());
                byte[] result = generate.digest();
                string_now = new StringBuffer();
                for (byte line : result) {
                    string_now.append(String.format("%02x", line & 0xff));
                }
            } catch (Exception e) {
                //
            }
            return string_now.toString();
        }

        public String md5_file(String file) {
            //Credits : Based on http://stackoverflow.com/questions/304268/getting-a-files-md5-checksum-in-java
            // Thanks to
            String resultado = "";
            try {
                MessageDigest convert = MessageDigest.getInstance("MD5");
                FileInputStream file_now = new FileInputStream(file);

                byte[] bytes_now = new byte[1024];

                int now_now = 0;
                while ((now_now = file_now.read(bytes_now)) != -1) {
                    convert.update(bytes_now, 0, now_now);
                };
                byte[] converting = convert.digest();
                StringBuffer result = new StringBuffer();
                for (int i = 0; i < converting.length; i++) {
                    result.append(Integer.toString((converting[i] & 0xff) + 0x100, 16).substring(1));
                }
                resultado = result.toString();
            } catch (Exception e) {
                //
            }
            return resultado;
        }

        public String get_ip(String hostname) {
            String resultado = "";
            try {
                InetAddress getting_ip = InetAddress.getByName(hostname);
                resultado = getting_ip.getHostAddress();
            } catch (Exception e) {
                //
            }
            return resultado;
        }
    }

    // The End ?


    Ejemplos de uso :

    Código: java

    package dhtools;

    import java.util.ArrayList;
    import java.util.Collections;

    public class Main {

        public static void main(String[] args) {
            DH_Tools tools = new DH_Tools();
            //String codigo = tools.toma("http://localhost/");
            //String codigo = tools.tomar("http://localhost/login.php", "usuario=test&password=dsdsads&control=Login");
            //tools.savefile("c:/xampp/texto.txt","texto");
            //String codigo = tools.read_file("c:/xampp/texto.txt");
            //String codigo = tools.console("ver");
            //String codigo = tools.httpfinger("http://www.petardas.com");
            /*
             ArrayList array = new ArrayList();
             Collections.addAll(array, "http://localhost/sql.php?id=dsaadsds", "b", "http://localhost/sql.php?id=dsaadsds", "c");
             ArrayList array2 = tools.repes(tools.cortar(array));
             for (int i = 0; i < array2.size(); i++) {
             System.out.println(array2.get(i));
             }
             */
            //System.out.println(tools.regex("1sadasdsa2","1","2"));
            //System.out.println(tools.response_code("http://www.petardas.com/"));
            /*
             File savefile = new File("c:/xampp/mierda.avi");
             if(tools.download("http://localhost/test.avi",savefile)) {
             System.out.println("yeah");
             }
             */

            //System.out.println(tools.extract_file_by_url("http://localhost/dsaads/dsadsads/index.php"));
            //System.out.println(tools.uri_split("http://localhost/index.php?id=dadsdsa","query"));
            //System.out.println(tools.md5_encode("123"));
            //System.out.println(tools.md5_file("c:\\xampp\\texto.txt"));
            //System.out.println(tools.get_ip("www.petardas.com"));
        }

    }


    Eso seria todo.

Hola BigBear,

algo de crítica para tu código (y por favor no dejarse intimidar al instante de ello). ;) :(

•   A primera vista: Demasiadas funciones coherentes en una clase. ;)
•   Las convenciones de código de Java comunes hacen el código claramente más entendible para todos los otros. Por ejemplo: CamelCase para clases y variables en vez de Snake-Case.
•   Tu nombramiento es... horripilante. String re, StringBuffer conte, URLConnection nave, BufferedReader leyendo – y esto es solo el primer método.
•   Exceptionhandling no esta existente.
•   Además no afecta solamente a los Exceptions, sino también a los Resource-Handling. Ningún recurso se finaliza de forma significativa, la mayoría de estos no se finalizan en absoluto.
•   Nunca se debería usar Raw-Types (como ArrayList array).

Gracias y saludos
Este es el mayor reproche al pueblo hispanohablante:

Que a pesar de su inteligencia y a pesar de su valentía siempre adoran el poder.

Septiembre 15, 2019, 10:21:59 PM #2 Ultima modificación: Septiembre 17, 2019, 08:43:17 PM por AXCESS
Hola BigBear,

viendo nuevamente tu código, te escribo esto:
Por favor utiliza tipos primitivos para esto. Pésimo.
Código: java

public Boolean download(String url, File savefile) {


Esto se ve tan bien, me pregunto por qué decidiste NO usar un switch o state para esto:
Código: java

if (opcion == "protocol") {
                resultado = url.getProtocol();
            } else if (opcion == "authority") {
                resultado = url.getAuthority();
            } else if (opcion == "host") {
                resultado = url.getHost();
            } else if (opcion == "port") {
                resultado = String.valueOf(url.getPort());
            } else if (opcion == "path") {
                resultado = url.getPath();
            } else if (opcion == "query") {
                resultado = url.getQuery();
            } else if (opcion == "filename") {
                resultado = url.getFile();
            } else if (opcion == "ref") {
                resultado = url.getRef();
            } else {
                resultado = "Error";
            }


Otro gran trabajo produciendo código basura. ¡Bien hecho! Realmente estás retrocediendo en tus habilidades.

Si esto, de hecho, se compila, me comeré mi sombrero de mier**.
Código: java

public ArrayList cortar(ArrayList array) {
    ...
    //ese nombre de función kek
}

Esto tiene que ser un troll.

Me gusta como cuando vi este hilo supe que yo estaría aquí para criticarlo. Roflmao

Algunas tomas más:

Código: java

public String toma(String link) {
        String re;
        StringBuffer conte = new StringBuffer(40);

En la mayoría de los contextos, usa StringBuilder, no StringBuffer.

Código: java

public String tomar(String pagina, String data) {
        // Credits : Function based in http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/

El código en los créditos es más claro y comentado.

Código: java

public void savefile(String ruta, String texto) {

        FileWriter escribir = null;
        File archivo = null;

¿Por qué estas variables tienen un alcance para todo el método? Eso es innecesario.
También savefile vs read_file, adhierete a UNA convención de denominación, por favor. No tienes consistencia.

Código: java

// read_file
Scanner leyendo = new Scanner(new FileReader(ruta));

Este scanner nunca se cierra.

Código: java

Runtime.getRuntime().exec("cmd /c " + command);

Este código es solo para Windows. Intenta mantener multiplataforma tu Java.

Código: java

public String httpfinger(String target)

Honestamente, ¿por qué necesitarías esto como un tipo de retorno de string? Un mapa de claves de encabezado a sus valores sería mucho más útil.

Código: java

public ArrayList repes(ArrayList array)

Bruh, hay muchas maneras mejores de eliminar duplicados.

Código: java

public ArrayList cortar(ArrayList array)

Ok, tienes que estar trolleando. Esta mier** no se compila.

Código: java

public String md5_file(String file)

Esto tampoco compila. Tienes un nombre de variable duplicado.

Código: java

regex(String code, String deaca, String hastaaca)

De nuevo, alcance retrasado. Literalmente declarado en la siguiente línea, ¿por qué inicializar a null? ¿El infierno?


Saludos


[Moderado by AXCESS]
Este es el mayor reproche al pueblo hispanohablante:

Que a pesar de su inteligencia y a pesar de su valentía siempre adoran el poder.

No entiendo, reviviste un post de 3 años de antigüedad solo para mofarte que sabes programar mejor que otra persona? Wow, felicidades...
No solo lo reviviste, sino que al no recibir atención, 6 meses después lo volves a revivir, felicidades campeón!

Septiembre 17, 2019, 08:46:51 PM #4 Ultima modificación: Septiembre 18, 2019, 01:25:56 AM por AXCESS
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Todo aquello que le he destacado en rojo es absolutamente innecesario.

No le asiste el derecho de emplear términos que humillen o denigren al usuario.

Mucho menos si su intensión es el de ayudarlo, corrigiéndole sus errores, para que así aprenda.

En realidad uno se cuestiona si su intensión es el de ayudarlo (altruismo), o de denigrarlo (miseria humana), a través de sus faltas, ensalzando, en el proceso, su  "superioridad" intelectual.

No le borraré sus inapropiados comentarios, pero definitivamente es una advertencia, ante su actuar.

Es una pena que el conocimiento no venga en comunión con esa humildad que indica grandeza, y sí con el remanente olvido de que todos, en nuestros inicios, tuvimos fallas que pudiéranse, tristemente denominar.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Hola AXCESS,

la personalidad defectuosa de BigBear se ha tomado a tiempo completo. Yo ya señale muchas cosas que están mal con su código hasta el punto en que ni siquiera se compila, sin embargo, la respuesta que obtengo de ti es proporcionarme un perfil psicológico y por qué es inapropiado de mi parte brindarle a BigBear mejores formas de hacer las cosas.
Con toda seriedad, en lugar de hacer trucos psicológicos aquí, repasemos esto una vez más:
BigBear proporciona un código defectuoso, le sugiero que lo arregle señalandole MUCHOS errores que cometió. Si sientes que el está siendo agredido mentalmente, no lo está. La programación se trata de una cierta lógica, las cosas pueden ser 0 o 1. El código de BigBear es un 0. No tiene más sentido discutir esto contigo y cualquier programador que esté dispuesto a ayudar continuará señalando sus errores para que pueda aprender de ellos. Los errores en la programación no son exclusivamente de BigBear, todos los cometemos, pero es por eso que es bueno que otras personas revisen su código. Si no deseas que otras personas revisen el código de BigBear, que el no lo publique en línea y que el no lo publicite como una especie de cosa perfecta y maravillosa para hacer ciertas cosas, porque no lo es.


Saludos
Este es el mayor reproche al pueblo hispanohablante:

Que a pesar de su inteligencia y a pesar de su valentía siempre adoran el poder.

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

A lo que me he referido ha sido a que no hay necesidad de" humillar" a nadie empleando términos, que si es honesto, y se pusiera en el lugar opuesto entendería.

Las deficiencias del conocimiento, sus observaciones y correcciones son válidas.  Si no, no tuviera sentido intercambiar y exponer los  trabajos.

Pero en cambio, el método usado para tal fin, ir señalando u corrigiendo (conocimiento en sí) y usar términos denominativos que pudieran ofender al usuario (forma de expresarse), no resulta positivo.

Solo me he referido a su dureza de denominaciones y términos (proyección) que no son ni educados, corteses, o pedagógicos. Completamente innecesarios.

Eso todo.
 
Lo de los juegos psicológicos de mi parte; u agresiones mentales por su lado... sobran.
Lamento que lo interprete de ese modo, y no sea capaz de ver el detalle de la educación, respeto y caballerosidad, de alguien que, como Ud. domina un saber y desea que otro aprenda de sus errores, sin sentirse abochornado, inferior, o arrepentido de confiar en que serán tolerantes y gentiles ayudándolo, al corregirle sus faltas.
 
Es sobre el aspecto humano y no sobre el conocimiento.
Es sobre el ser sensible, por encima de la fría lógica que develan los errores.
Solo hablo de cortesía o gentileza profesional al enseñarle a otro algo, destacándole dichas faltas , tal y como le enseñaron sus seres queridos, profesores y amigos.

Es Ud. un buen profesional, no me cabe la menor duda...
y será aún mejor persona si logra entender esto que le digo.

Mis mejores deseos.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Hola AXCESS,

estoy de acuerdo. Aquí hay algo nuevo para BigBear, recién presentado en JDK 13:

Código: java

String resultado = switch (opcion) {
case "protocol"  -> url.getProtocol();
case "authority" -> url.getAuthority();
case "host"         -> url.getHost();
case "port"         -> String.valueOf(url.getPort());
case "path"        -> url.getPath();
...
default              -> throw new IllegalArgumentException("Opción no soportada!");
};


Expresiones switch. ¿No se ve bien? ¿Te das cuenta de que nadie aquí te ha llamado a pesar del troll que hay detrás de todo esto?


Saludos


Hola BigBear,

además de los otros problemas enumerados anteriormente, utiliza los nombres de métodos de camelCasing como 'extractFileByUrl' en lugar de 'extract_file_by_url'.


Saludos
Este es el mayor reproche al pueblo hispanohablante:

Que a pesar de su inteligencia y a pesar de su valentía siempre adoran el poder.