Está en la página 1de 23

Facultad de Ingeniería, Arquitectura y Urbanismo

Escuela Académico Profesional de Ingeniería de Sistemas

SEPARATA
Seguridad Informática
Práctica
Seguridad Informática - 2
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

PROGRAMACIÓN CLIENTE-SERVIDOR
MEDIANTE SOCKETS EN JAVA

¿Qué es la arquitectura cliente servidor?


La arquitectura cliente-servidor es un modelo de aplicación distribuida en el que
las tareas se reparten entre los proveedores de recursos o servicios, llamados
servidores, y los demandantes, llamados clientes. Es decir, un cliente es el que
hace una solicitud de un servicio a un servidor y el servidor es un programa
que recibe una solicitud, realiza el servicio requerido y devuelve los resultados
en forma de una respuesta.

Qué es un socket?
Los sockets son un sistema de comunicación entre procesos de diferentes
máquinas de una red. Más exactamente, un socket es un punto de
comunicación por el cual un proceso puede emitir o recibir información.

Cómo funciona un socket?


El modelo básico de los sockets consta de 2 simples programas, un servidor y un
cliente. Básicamente el programa SERVIDOR comienza a escuchar en un puerto
determinado (nosotros lo especificamos), y posteriormente el programa CLIENTE
debe conocer la IP o nombre de dominio/hostname del servidor y el puerto que
está escuchando.

El socket sigue normalmente realiza los procesos de Abrir-Leer-Escribir-Cerrar.


Antes de que un proceso de usuario pueda realizar operaciones de entrada/salida,
debe hacer una llamada a Abrir (open), luego realizar llamadas a Leer (read) y
Escribir (write), para la lectura y escritura de los datos y una vez concluido el
intercambio de información, el proceso de usuario llamará a Cerrar (close) para
informar que ha finalizado.

Un proceso tiene un conjunto de descriptores de entrada/salida desde donde leer


y por donde escribir. Estos descriptores pueden estar referidos a ficheros,
dispositivos, o canales de comunicaciones llamados sockets.

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 3
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

El ciclo de vida de un descriptor, aplicado a un canal de comunicación (por


ejemplo, un socket), está determinado por tres fases:
 Creación, apertura del socket.
 Lectura y Escritura, recepción y envío de datos por el socket.
 Destrucción, cierre del socket.

En un esquema más completo donde se tiene muchos clientes con peticiones a un


solo servidor se puede apreciar cómo se realiza la comunicación con el
siguiente esquema que se muestra.

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 4
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 5
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Configuración del Servicio TELNET

* Acceso con Panel de Control de Windows

Proceso 01:
 INICIO

 PANEL DE CONTROL

 PROGRAMAS Y CARACTERÍSTICAS

 ACTIVAR O DESACTIVAR CARACTERÍSTICAS DE WINDOWS

 SERVIDOR TELNET / CLIENTE TELNET (Dependiente del S.O. instalado)

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 6
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Proceso 02:
 INICIO

 PANEL DE CONTROL

 SISTEMA Y SEGURIDAD

 HERRAMIENTAS ADMINISTRATIVAS

 SERVICIOS

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 7
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 8
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

* Acceso con CMD


Instalar Telnet con un comando rápido.
a. Primero abre el Símbolo del sistema escribiendo cm d en el campo
“Ejecutar”.
b. En la línea de comando, escribe p k g m g r / i u : " T e l n e t S e r v e r " y
presiona Enter . Después de un momento, regresarás al Símbolo del sistema.
c. En la línea de comando, escribe p k g m g r / i u : " T e l n e t C l i e n t " y
presiona Enter . Después de un momento, regresarás al Símbolo del sistema.

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 9
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Ejemplo1 – socket Base:

Aplicación en donde una vez establecida la conexión el servidor solicita el nombre


del cliente, el cliente introduce su nombre, y el servidor le da una bienvenida
mediante un mensaje.

Programa Servidor:
package socket01;

//Declaramos librerías necesarias


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

public class Servidor {

private ServerSocket sServidor; //Socket del servidor


private Socket sCliente; //Socket para el cliente
private Scanner entrada; //Flujo de Entrada para envio de datos
private PrintStream salida; //Flujo de Salida para recepcion de datos
private final int puerto; // Puerto por el cual escuchara el servidor

public Servidor(int p) {
puerto = p;
}

public void iniciar() {


try {
//Se Crea el socket del servidor
sServidor = new ServerSocket(puerto);
System.out.println(" - SERVIDOR INICIADO - ");
System.out.println(" - Espèrando Cliente - ");

//El metodo accept(), espera hasta que un cliente realice una conexión
//Una vez que se ha establecido una conexión por el cliente, este
//método devolverá un objeto tipo Socket, a través del cual se establecerá
//la comunicación con el cliente
sCliente = sServidor.accept();

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 10
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

//Obtengo una referencia a los flujos de datos de entrada y salida del socket
cliente
entrada = new Scanner(sCliente.getInputStream());
salida = new PrintStream(sCliente.getOutputStream());

//Esta sección puede ser modificada según nuestros requerimientos


System.out.println("Cliente Conectado:" + sCliente.getInetAddress() +
":" + sCliente.getPort());
salida.println("EJEMPLO1 - Saludo");
salida.println("Ingrese Su Nombre ->");
String nombre = entrada.next();
salida.println("");
salida.println("");
salida.println("Bienvenido " + nombre);

//Cerramos la conexión
finalizar();
} catch (IOException e) {
finalizar();
}
}

public void finalizar() {


try {
entrada.close();
salida.close();
sCliente.close();
sServidor.close();
System.out.print("Conexion Finalizada...");
} catch (IOException e) {
}
}
}

Programa Main:
package socket01;

public class Main {

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 11
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

public static void main(String arg[]) {


Servidor x = new Servidor(9090);
x.iniciar();
}
}

Capturas:
Iniciando el servidor

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 12
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Realizando ipconfig para conocer el IP del equipo (IP DEL SERVIDOR) a través de
CMD.

 Dirección IPV4

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 13
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Estableciendo conexión desde el cliente mediante telnet hacia el Servidor:

Ingreso del cliente (esquema de trabajo del cliente):

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 14
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Resultado, una vez ingresado nuestro nombre el servidor nos manda un mensaje de
bienvenida.

Vista SERVIDOR de finalización de conexión.

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 15
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Ejemplo2 – Chat Simple:

El siguiente programa establece una conexión básica entre un servidor y un cliente


Donde una vez establecida la conexión el servidor y el cliente, pueden chatear
entre ellos, hasta que los dos introduzcan la palabra “bye”.

Programa Servidor:
package socket02;

//Importamos librerías necesarias


import java.io.*;
import java.net.*;
import java.util.Scanner;
import java.awt.event.*;

public class Servidor {

private ServerSocket sServidor; //Socket del servidor


private Socket sCliente; //Socket para el cliente
private Scanner entrada; //Flujo de Entrada para envio de datos
private PrintStream salida; //Flujo de Salida para recepcion de datos
private final int puerto; // Puerto por el cual escuchara el servidor
private String mensaje_enviar = "";
private String mensaje_recibido = "";
private final javax.swing.Timer t; //Declaramos un Timer

public Servidor(int p) {
puerto = p;

//El timer será el encargado de ejecutar este bloque de código cada 500
[ms]
//Es decir, que este leerá y mostrara los mensajes recibidos cada 0.5
segundos
//siempre o cuando se haya creado una conexión y exista un mensaje.
t = new javax.swing.Timer(500, (ActionEvent e) -> {
if (sCliente.isConnected() && !mensaje_recibido.equals("bye")) {
mensaje_recibido = entrada.next();
System.out.println("Cliente Dice: " + mensaje_recibido);

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 16
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

}
});
}

public void iniciar() {


try {
//Inicamos el servidor
sServidor = new ServerSocket(puerto);
System.out.println(" - SERVIDOR INICIADO - ");
System.out.println("- Esperando conexión del Cliente ... - ");

//El metodo accept(), espera hasta que un cliente realice una conexión
//Una vez que se ha establecido una conexión por el cliente, este
//método devolverá un objeto tipo Socket, a través del cual se
establecerá
//la comunicación con el cliente.
sCliente = sServidor.accept();

//Obtengo una referencia a los flujos de datos de entrada y salida del


socket cliente
salida = new PrintStream(sCliente.getOutputStream());
entrada = new Scanner(sCliente.getInputStream());
System.out.println("Cliente Conectado " + sCliente.getInetAddress() +
":" + sCliente.getPort() + "\n");

//iniciamos el timer
t.start();
Scanner lector = new Scanner(System.in);

//Escribimos los mensajes hacia el cliente


while (!mensaje_recibido.equals("bye")) {
mensaje_enviar = lector.next();
salida.println("Servidor Dice : " + mensaje_enviar);
}

//Terminamos la conexión
finalizar();
} catch (IOException e) {
finalizar();
}

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 17
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

public void finalizar() {


try {
t.stop();
salida.close();
entrada.close();
sCliente.close();
sServidor.close();
} catch (IOException e) {
}
}
}

Programa Main:
package socket02;

public class Main {

public static void main(String arg[]) {


Servidor x = new Servidor(9999);
x.iniciar();
}
}

Capturas:
Dirección IPV4

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 18
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Iniciando el servidor

Conectando el cliente al servidor

Comunicación Cliente – Servidor

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 19
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Ejemplo3 – Eco:

El siguiente programa establece una conexión básica entre un servidor y un


cliente. Donde una vez establecida la conexión el servidor solicita que
introduzca un texto al cliente y el servidor devuelve un “eco”, es decir el mismo
mensaje que se envió. (No es necesario TELNET, correr en forma independiente
MainServidor y MainCliente).

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 20
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 21
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 22
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Capturas
Dirección IPV4

Iniciando el servidor (MainServidor)

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.


Seguridad Informática - 23
© InfoConsulting, I.C. - S.A.C., Perú - M.C. Ing. Carlos Alberto Chirinos Mundaca

Estableciendo conexión desde el cliente, iniciando cliente (MainCliente)

Resultados, enviando mensajes y retornado ecos

Por parte del cliente

Por parte del servidor

Asesoría y Consultoria Empresarial – Auditoria, Consultoria y Peritajes Informáticos y de Sistemas.

También podría gustarte