/*Codigo de slider */

martes, 23 de abril de 2013

http://www.mclarenx.com/2012/08/10/configurar-vsftpd-y-evitar-los-errores-500-y-530/

Configurar el Servidor FTP con Kubuntu


Instalación

[+/-] Ver / Ocultar Archivo vsftpd.conf
vsftpd.chroot_list
Este fichero no suele existir así que debemos crearlo y editarlo. Aquí irán los nombres de usuarios que queremos que puedan listar todos los directorios del servidor y no sólo el suyo asignado por FTP. Esto viene bien para usuarios administradores.
sudo nano /etc/vsftpd.chroot_list
Este comando te abrirá un documento vacío, pon en cada línea un nombre de usuario.
Ejemplo:
pepe
juan
virtual
Grupo FTP
Todos los usuarios que queramos utilizar para FTP deben estar albergados en el mismo grupo para así darles unos permisos especiales como no poder conectarse por SSH al servidor.
Creamos el grupo:
sudo groupadd ftp
Creamos una shell fantasma para que no puedan entrar a la consola del servidor:
sudo mkdir /bin/ftp
Abrimos la lista de shells del sistema:
sudo nano /etc/shells
Agregamos nuestra shell fantasma al final del fichero:
/bin/ftp
Usuario FTP
Lo primero es crearle una carpeta de usuario. Puedes hacerlo donde tú quieras, pero yo suelo meterles a todos en una subcarpeta del home general.
Creamos la carpeta para meter a los usuarios:
sudo mkdir /home/ftp
Creamos la carpeta del usuario particular:
sudo mkdir /home/ftp/pepe
sudo mkdir /home/ftp/juan
sudo mkdir /home/ftp/virtual

Creamos el usuario:
sudo useradd -g ftp -d /home/ftp/pepe -c "Pepe P" pepe
sudo useradd -g ftp -d /home/ftp/juan -c "Juan P" juan
sudo useradd -g ftp -d /home/ftp/virtual -c "Virtual P" virtual

Explicación:
-g ftp => el usuario pertenece al grupo ftp
-d /home/ftp/pepe => el directorio principal del usuario es /home/ftp/pepe
-c “Pepe P” => el nombre completo del usuario es Pepe P
pepe => la última palabra será el nombre de usuario
Ahora le asignamos una contraseña:
sudo passwd pepe
sudo passwd juan
sudo passwd virtual

Y finalmente le asignamos la shell fantasma:
sudo usermod -s /bin/ftp pepe
sudo usermod -s /bin/ftp juan
sudo usermod -s /bin/ftp virtual

Este paso se podía haber hecho al crear el usuario, pero lo dejo separado por si queremos asignarle la shell fantasma o no.
Errores conocidos
530 Login incorrect
Este error es el más común con la última versión del vsftpd. Es un gran quebradero de cabeza con una solución muy simple:
sudo apt-get remove vsftpd
sudo rm /etc/pam.d/vsftpd
sudo apt-get install vsftpd
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Este error se da porque vsftpd no permite que los usuarios puedan escribir en su carpeta raíz. Una solución es quitarle los permisos de escritura a esa carpeta. Esto hará que el usuario no pueda hacer nada en su propia carpeta, así que lo mejor es crearle otra dentro con permisos normales para que pueda utilizarla.
sudo chmod 555 /home/ftp/pepe
sudo mkdir /home/ftp/pepe/documentos
sudo chown pepe:ftp /home/ftp/pepe/documentos
Con todo esto ya deberías poder acceder al servidor FTP con cualquier usuario del sistema sin ningún problema.

Instalando FileZilla

Para instalar FileZilla en Ubuntu, Xubuntu, Kubuntu, etc

sudo apt-get install filezilla

lunes, 22 de abril de 2013

Como abrir puertos en Linux (Ubuntu)


Abre la terminal (Ctrl+Alt+T) y ejecuta la siguiente orden:
Ubuntu Server, Xubuntu , Kubuntu, etc
sudo iptables -A INPUT -p tcp -i eth0 --dport 3306 -j ACCEPT

Se recomienda instalar firestarter, es una GUI de iptables muy practicas e intuitiva..... 
Nota: se necesita conexión a Internet

Código:
sudo apt-get install firestarter

Sockets con Hilos

ServidorHilo.java

import java.io.*;
import java.net.*;
import java.util.logging.*;

public class ServidorHilo extends Thread {

    private Socket socket;
    private DataOutputStream dos;
    private DataInputStream dis;
    private int idSessio;

    public ServidorHilo(Socket socket, int id) {
        this.socket = socket;
        this.idSessio = id;
        try {
            dos = new DataOutputStream(socket.getOutputStream());
            dis = new DataInputStream(socket.getInputStream());
        } catch (IOException ex) {
            Logger.getLogger(ServidorHilo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void desconnectar() {
        try {
            socket.close();
        } catch (IOException ex) {
            Logger.getLogger(ServidorHilo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void run() {
        String accion = "";
        try {
            accion = dis.readUTF();
            if(accion.equals("hola")){
                System.out.println("El cliente con idSesion "+this.idSessio+" saluda");
                dos.writeUTF("adios");
            }

        } catch (IOException ex) {
            Logger.getLogger(ServidorHilo.class.getName()).log(Level.SEVERE, null, ex);
        }
         desconnectar();
    }
}
En el constructor creamos dos buffers (uno de entrada y otro de salida) para gestionar los envíos y recibos del cliente, y dentro del método RUN gestionamos qué hacer cuando recibamos un mensaje del cliente.

 Servidor
La clase Servidor.java se encarga de asignar un nuevo Thread a cada nueva conexión.
import java.io.*;
import java.net.*;
import java.util.logging.*;

public class Servidor {

    public static void main(String args[]) throws IOException {

        ServerSocket ss;
        System.out.print("Inicializando servidor... ");
        try {
            ss = new ServerSocket(10578);
            System.out.println("\t[OK]");
            int idSession = 0;
            while (true) {
                Socket socket;
                socket = ss.accept();
                System.out.println("Nueva conexión entrante: "+socket);
                ((ServidorHilo) new ServidorHilo(socket, idSession)).start();
                idSession++;
            }

        } catch (IOException ex) {
            Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Cliente
El Cliente.java lo representamos mediante otra clase llamada Persona que se encarga de enviar y recibir los mesnajes que vienen y van del servidor.
import java.io.*;
import java.net.Socket;
import java.util.*;
import java.util.logging.*;


class Persona extends Thread {

    protected Socket sk;
    protected DataOutputStream dos;
    protected DataInputStream dis;
    private int id;

    public Persona(int id) {
        this.id = id;
    }

    @Override
    public void run() {
        try {
            sk = new Socket("127.0.0.1", 10578);
            dos = new DataOutputStream(sk.getOutputStream());
            dis = new DataInputStream(sk.getInputStream());

            System.out.println(id + " envía saludo");
            dos.writeUTF("hola");
            String respuesta="";
            respuesta = dis.readUTF();
            System.out.println(id + " Servidor devuelve saludo: " + respuesta);
            dis.close();
            dos.close();
            sk.close();
        } catch (IOException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

public class Cliente {

    public static void main(String[] args) {
        ArrayList<Thread> clients = new ArrayList<Thread>();
        for (int i = 0; i < 5; i++) {
            clients.add(new Persona(i));
        }
        for (Thread Thread : clients) {
            Thread.start();
        }
    }
}

lunes, 18 de marzo de 2013

Código Java de Servidor (Sockets)


[+/-] Ver / Ocultar Código

Código Java de Cliente (Sockets)

[+/-] Ver / Ocultar Código

jueves, 10 de noviembre de 2011

Palíndromo

/*
 * Programa Elaborado para la Clase de Fundamentos de Programacion
 * M.C.Adrián Morales Gálvez
 * Fecha: 09-Noviembre-2011
 */
package palindromo;
import java.util.*;

/**
 * Instituto Tecnológico de Acapulco
 * Se utiliza dos tipos de datos no primitivos, o mejor dicho de tipo String
 * utilizando un metodo de la clase String llamado:
 *                  toCharArray()  // que se utiliza para convertir la cadena en un Arreglo de tipo caracter
 *                  y posteriormente se pasan los caracteres de manera invertida a otro arreglo de tipo char
 *                  y por ultimo se copian los caracteres a la cad2 para compararla con la cadena de entrada opc
*                   utilizando el metodo equals  para comprobar si son iguales.
 */
public class Palindromo
{
  String opc = new String();
  String cad2 = new String();  
  static Scanner Lee = new Scanner(System.in);
   
    void Forma1_palindromo()
    {
          System.out.println("\n\n******** FORMA 1 PALINDROMO **********");
          System.out.print("\nEscribe la cadena a Comprobar : ");
          opc= Lee.next();
         
          int j= opc.length()-1;
          cad2="";      
          for(int i=0;i<=j;i++)
          {
             cad2=cad2+opc.charAt(j-i); //copia el ultimo caracter de la cadena opc ala cad2 y asi sucesivamente...
          }        
         if(opc.equals(cad2))           // Compara la cadena opc con la cadena cad2, si son iguales imprime es un palindromo
          {
              System.out.println(" Es un palindromo");
          }
          else
          System.out.println(" No es un palindromo..");                
    }
    void Forma2_palindromo()
    {        
          System.out.println("\n\n******** FORMA 2 PALINDROMO **********");
          System.out.print("\nEscribe la cadena a Comprobar : ");
          opc= Lee.next();
         
          int j= opc.length()-1;
          char A[] = new char[j+1];  // Se declara un arreglo A de tipo char, y de tamaño j+1
          char B[] = new char[j+1];  // Se declara un arreglo B de tipo char, y de tamaño j+1
         
          A=opc.toCharArray();       // Se convierte en un Arreglo de caracteres la cadena opc y se pasa al Arreglo A;
          for(int i=0;i<=j;i++)
          {
            //A[i]=opc.charAt(i); // Se pasan los caracteres de la cadena (opc) al arreglo de tipo char  A[]
            B[i] =A[j-i];       // Se invierte el orden de caracteres a otro arreglo de tipo char B[]
          }
          int ban=0;   // Se declara una variable de tipo entera para utilizarla en la comparacion de los arreglos A y B        
          for(int i=0;i<j;i++)
          {if(A[i]==B[i])   // Se compara cada uno de los dos caracteres de los arreglos A[] y B[] de tipo caracter
              { ban++;
              }            
          }        
          if(ban==opc.length()-1) // Significa que todos los caracteres son iguales en los dos Arreglos y por ende entonces la cadana
          {                       // de entrada (opc) es un palindromo
              System.out.println(" Es un palindromo");
          }
          else
          System.out.println(" No es un palindromo..");    
    }
   
    // Con la palabra static, puede ser llamado el metodo mensaje desde el metodo main, sin necesidad de ser instanciada por
    // un objeto...
    static void Mensaje(String m)
    {
        System.out.print(m);
    }
    public static void main(String[] args)
    {
      Palindromo obj = new Palindromo();
      int opc;
     
      do{
         Mensaje("\n\n***********MENU PRINCIPAL DEL PROGRAMA********");
         Mensaje("\n1. Forma 1 de Comprobar si la palabra es un PALINDROMO");
         Mensaje("\n2. Forma 2 de Comprobar si la palabra es un PALINDROMO");
         Mensaje("\n3. Para salir..>> ");
         opc=Lee.nextInt();
       
         switch(opc)
         {
             case 1: obj.Forma1_palindromo();break;
             case 2: obj.Forma2_palindromo();break;
             case 3: break;
             default:
                 Mensaje("Opción no valida, escribe la opcion correcta, ok");
         }
        }while(opc!=3);  // Se repite mientras la variable opc sea diferente del numero 3
     
    }
}

martes, 18 de octubre de 2011

Introducción al Lenguaje Java

Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.Con respecto a la memoria, su gestión no es un problema ya que ésta es gestionada por el própio lenguaje y no por el programador.
Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible.
La implementación original y de referencia del compilador, la máquina virtual y las bibliotecas de clases de Java fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha controlado las especificaciones, el desarrollo y evolución del lenguaje a través del Java Community Process, si bien otros han desarrollado también implementaciones alternativas de estas tecnologías de Sun, algunas incluso bajo licencias de software libre.
Entre diciembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java aún no lo es).



Contenido


[+/-] Ver / Ocultar