Monthly Archives: abril 2012

Downloading from FTP servers in Java

Some months ago I needed a program which did the following:

– Connectsto an FTP host

– Check everything inside the remote folder

– Download all the files

– Delete all the files

– Wait a minute until the next connection

I found a very tiny program which did it ok but it has a problem, it’s always hanging and the information I had to receive was not properly updated, so I took the decision to make myself a program to do the same. The decision of using Java as the programming language was easy, but my Java skills were not as good as a year ago.

Luckily I found a great class called JvFTP (Yes! You have guessed: Java FTP) that works. After some tries this was the result:

import cz.dhl.io.*;
import cz.dhl.ftp.*;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FTPClass {
    public static final int    BUFFER_SIZE = 10240;
    
    public static void ftpdownload(String host, String user, String pass) {
        /*
         * Creates the connection to the FTP Server using the given parameters
         */
        FtpConnect cn = FtpConnect.newConnect(“ftp://” + host);
        cn.setUserName(user);
        cn.setPassWord(pass);
        Ftp cl = new Ftp();

        try {
            /*
             * Connects to the host
             */
            cl.connect(cn);

            /*
             * Gets current path
             */
            CoFile dir = new FtpFile(cl.pwd(), cl);

            /*
             * Gets the list of files inside the directory
             */
            CoFile fls[] = dir.listCoFiles();
            if (fls != null)
                for (int n = 0; n < fls.length; n++) {
                    /*
                     * Prints the name of the file. If it’s a directory it’ll be discarded
                     */
                    System.out.println(
                        fls[n].getName() + (fls[n].isDirectory() ? “/” : “”));
                    String pathFile = fls[n].getName() + (fls[n].isDirectory() ? “/” : “”);
                    /*
                     * Creates the InputStream from the FTP connection
                     */
                    FtpFile file = new FtpFile(pathFile, cl);              
                    InputStream in = file.getInputStream();
                    /*
                     * Creates the OutputStream to the file in the local disk
                     */
                    OutputStream out= new FileOutputStream(fls[n].getName());
                    byte[] buffer= new byte[BUFFER_SIZE];
                    /*
                     * Reads and writes…
                     */
                    while (true) {
                      int k= in.read(buffer);
                      if (k < 0)
                        break;
                      out.write(buffer, 0, k);
                    }
                    in.close();
                    out.close();
                }
            
        } catch (IOException e) {
            System.out.println(e);
        } finally { /* disconnect from server
              * this must be always run */
            cl.disconnect();
        }
    }
    public static void main(String args[]) {
        ftpdownload(“myhost”, “myuser”, “mypass”);
    }
}

Microsoft and the updates… They did it again

I’ve been all this week trying the get myself comfortable with Windows 2008 Server. Yes, I know that this system came out 4 years ago, but until TODAY I haven’t felt the need to change.

Anyway, the first steps have been very good, perhaps better than I thought at the begining. Windows 2008 is fast, really fast when you have multicore processors, the problem is the huge amount of memory it likes to eat. Yes, at least 4GB is more than recommended, specially if you are dealing with the 64 bit version, which is, in my honest opinion, the best you can do.

For my testing purposes I am using a brand new HP Proliant DL120 server. The installation time took about 1 hour. After that I could install WITH NO PROBLEMS the Hyper-V service and have a virtual machine with Windows 2003, because there are still some programs we need which refuse to work in Windows 2008.

Everything went fine until I had to install Service Pack and a lot of KB updates. After that, my “loved” RDP service (Terminal Server) to control the server remotelly stop working… HOW? WHAT? Yes, after the needed reboot to complete the installation of updates RDP stopped working and that obviouslly a problem for a System Administrator like me, who likes to control everything from a desk and not having to move to the room where all the servers are. Luckily I found the solution… and yes, as always a mistake from Microsoft: KB2667402.

What happened was that this KB never has to be installed before Service Pack 1 and the installer did that. It was installed and then Service Pack. The solution is to uninstall this KB from the command line and then leave Windows Update to search for it again. To do such thing the command from a shell is:

wusa /uninstall /kb:2667402

Voila!!! The server will reboot and Terminal Server will work again.

 


Implementando un servidor Radius para WIFI

La verdad es que es casi de vergüenza que en la época en la que estamos aún no me haya metido en el fregado de montar una Wifi en condiciones en la empresa. Hasta la fecha, como no demasiada gente se conectaba a nuestra Wifi, usábamos una encriptación WPA2 con clave fija. Evidentemente con poca gente esto no supone muchos riesgos, ya que en caso de despido y cese en la empresa de alguno de los usuarios que usan la Wifi con cambiarla y dar la nueva contraseña es suficiente. El problema es cuando este número de usuarios crece, y crece…

Evidentemente hoy en día con el auge de las tabletas, móviles con Wifi, portátiles, etc etc.. es casi imposible que no haya nadie que te diga “¿Me puedes dar la contraseña de la Wifi?”… Solución: Wifi por usuarios, ¿el método? Autenticación con Radius.

Para este pequeño experimento he utilizado un punto de acceso DLINK DWL-2100AP y un servidor Proliant al que primeramente instalé FreeRadius y a continuación TekRadius. Las pruebas con FreeRadius fueron realmente satisfactorias. Mi pobre iPhone acabo harto de que cada dos por tres estuviera entrando y saliendo de la Wifi. Finalmente opté por dejar el servicio con TekRadius, ya que la versión de FreeRadius que hay ahora mismo en Windows 2008 tiene un Bug y solo funciona en modo DEBUG, lo cual no es deseable en entornos de producción.

En fin… Para configurar este invento hay que hacer lo siguiente:

Primeramente descargarnos TekRadius de la web: www.tekradius.com

Existen dos versiones, una que guarda los datos en SQL y otra que utiliza SQL Lite y que no necesita de una base de datos externa. Yo me he descargado la versión para SQL Lite, ya que para hacer pruebas realmente no tengo por qué estar complicándome demasiado.

Es importante también bajarse el programa TekCert de la misma web ya que con él crearemos el certificado de seguridad que incluiremos con nuestra conexión e instalarlo, ya que lo primero que haremos será crear un certificado que se utilizará en los clientes que tengan capacidad de utilizar PEAP usando un certificado, más seguro.

Como ya he comentado anteriormente lo primero es abrir TekCert. Y rellenar los campos para crear un certificado. En la siguiente captura de pantalla podemos ver cómo quedaría uno que he creado yo:

Deberéis de rellenarlo con vuestros datos.Quizás lo único que habría que tener en cuenta es la duración del certificado “Valid for”. Yo le he puesto 9999, lo que hace que el certificado sea válido para este número de días. Eso ya a ha gusto de cada uno.

Tras haber creado el certificado con “Generate Certificate” podemos salir del programa e irnos al TkRadius Manager. Lo primero de todo es dejar el programa bien configurado antes de meternos en líos. Para ello pulsamos sobre la pestaña Setting y a continuación Service Parameters. Veremos que aparece algo así:

Y lo configuraremos de la siguiente manera:

Listen IP Address: La dirección IP de nuestra máquina servidora, es decir, donde está instalado el programa

Startup: Automatic, así en caso de reiniciar la máquina el servicio Radius arrancará solo

Logging: Yo uso debug para obtener logs de todo, en caso de no querer ponéis none o un nivel inferior.

Authentication Port: 1812. Es el usado por defecto para Radius.

PEAP Inner Auth Method: Hay varios. Yo con EAP-MS-CHAP he conseguido que se me autenfiquen iPhones y Blackberrys. Con otros puede daros problemas. Es cuestión de ir probando.

Accounting Enabled Port: Se marca solo si vuestro punto de acceso requiere este dato. Por lo normal es el puerto Radius + 1, por lo que si el puerto era 1812 este será 1813. En mi caso tuve que usarlo o mis clientes no se autentificaban corréctamente.

Grabamos con “Save Settings” y a continuación nos vamos a la pestaña “Users” donde definiremos los usuarios que podrán conectarse a nuestra Wifi. He creado un usuario llamado “pruebita”, con contraseña igualmente “pruebita”. En la siguiente pantalla podeis ver cómo quedaría:

Para dar de alta los usuarios hay que hacer lo siguiente:

En la parte izquierda añadimos el nombre de usuario. Cuando esté hecho pinchamos sobre él y en los “Attribute” de la derecha activamos:

  • Check User-Password: Y en la casilla de la derecha ponemos la contraseña que va a tener dicho usuario. Vereis que queda oculta con asteriscos
  • Check TLS-Server-Certificate: Al pulsar sobre el desplegable de la derecha os aparecerá el certificado que habéis creado con TkCert.

Con esto ya tenemos nuestro usuario creado. Ya estamos casi, falta solamente definir al punto de acceso. Para ello pulsamos sobre la pestaña “Clients” y aparecerá algo parecido a lo siguiente:

 

Para dar de alta nuestro punto de acceso (En nuestro caso el DLINK) rellenaremos los campos de la siguiente manera:

  • NAS: IP que tiene actualmente el punto de acceso. Esto es importante. En caso de cambiar alguna vez la IP del punto de acceso también deberemos de cambiarla aquí.
  • Secret: Contraseña con la que el punto de acceso se conectará a nuestro Radius. Poned una cualquiera , que sea segura, y es la que usaréis a la hora de configurar el punto de acceso.
  • Vendor: por lo normal usad ietf
  • Enabled: Yes

Ya tendremos TkRadius configurado. Para más seguridad de que funcione corréctamente debereis de reiniciar el servicio o incluso reiniciar el ordenador completamente. El último paso sería configurar el punto de acceso. En el caso de mi DLINK quedaría de la siguiente manera:

Tanto en Radius server como Accounting Server debéis de poner la dirección IP de vuestro servidor Radius. Aplicad los cambios y lo siguiente es coger un dispositivo Wifi y conectaros a la red. ¡A mí me ha funcionado incluso con un iPhone!

Me siento engañado en España por las compañias Telefónicas

Esta semana he estado en Londrés. La verdad es que estuve hace pocos meses, pero por causas que no vienen al caso he tenido que volver con mi queridísima @MariMarCampoy.

La historia de mi “cabreo” monumental fue debido a que conocimos a un grupo de españoles que estaban trabajando en Londrés y les comentamos la posibilidad de conectarnos a internet de alguna manera “barata y sencilla”. Por mi parte llevo un iPhone con contrato de Movistar de empresa, que podre de mí que active el Roaming, porque con solo encender la itinerancia de datos estamos embolsando a estos señores 10€ por 10Mb diarios, que por supuesto en caso de superarse vuelven a ser otros 10€… y así hasta quién sabe… ¿Solución? Contratar una tarjeta PREPAGO (Sí! Prepago!) para el iPhone en una compañia llamada “3”, así como suena, el numero “3”, que por 15 libras esterlinas, unos 18€ mensuales, permite: Internet ilimitado!! (Nada de restricciones como en España), 3000 mensajes, 3000 minutos gratis, 1000 minutos si es a otros números que no sean de “3”….

Cuando me lo comentaron no me lo creía, así que dicho y hecho nos acercamos a una tienda de “The Phone Warehouse”, que viene a ser el “The Phone House” de España. En poco más de 10 minutos teníamos nuestra tarjeta en nuestras manos y doy fe de que funciona sin problemas. Además, si tenemos un móvil que permita compartir Internet, como el iPhone que llevábamos, podremos usar un portatil y sin límite de nada estar navegando a nuestras anchas… ¡¡ por 15 míseras libras !!

Lo mejor de todo es que esto no acaba aquí… Cualquier compañía te da tarjetas de prepago para iPhone, Android o lo que sea. No hay que volverse loco. Incluso O2, que son nuestra Telefónica pero en Inglaterra, te da tarjetas que por 1 libra al día te conectas a Internet, pero que encima permiten llamar a España por 5 peniques de libra por minuto. Y ya para volverse loco… Londres está lleno de los llamados “HotSpots Wifi”. Son puntos Wifi que si contratas este servicio con tu operador tendrás acceso Wifi en prácticamente cualquier parte de Londres, sin tener que estar tirando de 3G que a veces “garraspea” un poco. Gracias a eso entendí cómo la gente llegaba a los millones de cafeterías de Londres, abría sus portátiles y se ponían a trabajar…

En resumen, me siento engañado en España por las compañias telefónicas a más no poder. A parte cada vez tengo más claro que tecnológicamente hablando estamos en la prehistoria.. ¡y encima en crisis!