Proyecto Final Introducción a los Lenguajes de programación Instituto IACC 20 de marzo de 2018
Actividad
Usted trabaja para una agencia gubernamental de seguridad y ha notado ataques informáticos a sus servidores. El archivo de logs de su cor tafuego tiene líneas de este estilo:
Desde 111.222.333.444-Conexión hacia 1.1.1.1-Web Desde 123.123.123.123-Conexión hacia 2.2.2.2-FTP Desde 5.111.123.11-Conexión hacia 1.2.1.2-SSH
Usted desea saber quiénes y a qué máquinas están atacando. Para ello, se le solicita que desarrolle los siguientes pasos:
Ya tiene desarrollada la función que le permite identificar, dada una línea del archivo de logs, la IP desde donde le están hacie ndo el ataque, la cual puede ver a continuación:
?php function conocerIpOrigenAtaque ($cadena) { $ipOrigen =' '; $primerBlanco = stripos($cadena,' '); $primerGuion = stripos($cadena,'-'); $ipOrigen = substr($cadena, $primerBlanco, ($primerGuion - $primerBlanco)); echo 'La IP desde donde se hace el ataque es: ' . $ipOrigen . '
'; } ?> Para hacer la prueba con la primera línea del archivo de logs se ejecuta luego de la función la siguiente instrucción:
conocerIpOrigenAtaque("Desde 5.111.123.11-Conexión hacia 1.2.1.2-SSH");
Y se obtiene el siguiente resultado:
La IP desde donde se hace el ataque es: 5.111.123.11
Tomando como base la función anteriormente descrita, escriba las siguientes funciones en PHP o pseudocódigo: o
Función que identifique la IP que recibe el at aque
o
Función que devuelva el servicio que está siendo atacado
Explique brevemente las instrucciones necesarias para trabajar con el archivo que guarda la información de ataques informáticos.
Si se quisiera conocer las IP que más han intentado atacarlo, ¿Cómo podría llevarse a cabo esto? ¿Qué estructuras de datos de las vistas (arreglos, pilas, colas) utilizaría? ¿Será necesario emplear alguno de los ciclos de iteración vistos en la asignatura (for, while, dowhile)? Justifique sus respuestas (se sugiere que se apoye en pseudocódigo o código en PHP) y tome en cuenta que se busca obtener algo como lo que se detalla a continuación: 123.123.123.123 ha realizado 13 ataques. 5.111.123.11 ha realizado 8 ataques. 111.222.333.44 ha realizado 5 ataques.
Declare las clases que serían necesarias en caso que se quisiera trabajar en PHP pero con Programación Orientada a Objetos (POO). Explique el porqué de las declaraciones que realiza.
Desarrollo
A continuación se escribirá la función que identifique la IP que recibe el ataque tomando en cuenta la función anteriormente descrita
La IP Atacada es:
' . $IpAtacada . '
'; } IpReceptoraAtaque('123.123.123.123-Conexión hacia 2.2.2.2-FTP');
A continuación se escribirá la función que devuelva el servicio que está siendo atacado, tomando en cuenta la función antes descrita
if($serv =='111.222.333.44') { echo 'La IP es: '. $serv; echo ' El Servicio Atacado es: WEB
'; } if($serv =='123.123.123.123') { echo 'La IP es: '. $serv; echo ' El Servicio Atacado es: FTP
'; } if($serv =='5.111.123.11') { echo 'La IP es: '. $serv; echo ' El Servicio Atacado es: SHH
'; return $serv; } } servicioAtacado('123.123.123.123');
Las instrucciones necearías para trabajar con el archivo que guarda la información de ataques informática son:
Método Constructores: un constructor es una subrutina cuya misión es inicializar un objeto de una clase. En el constructor se asignan los valores iniciales del nuevo objeto.
Método Público: los atributos o métodos públicos, podrán ser leídos o llamados en cualquier parte del código, ya sea de la misma clase o también fuera de esta, significa también que podrá ser alterado sin restricciones, para evitar esto es recomendable que se declaren como privados salvo casos excepcionales.
Método Protegido: Se utilizan principalmente para acceder desde la misma clase o de clases heredadas.
Declaración de la Variable: se declara la variable es donde se encuentran los datos que serán mostrados.
Definición de las Variables: Se declara la o las variables con las que se trabajaran.
Para el caso planteado se pueden utilizar varias estructuras de datos, las cuales nos permiten resolver un problema de manera más sencilla gracias a que las reglas que las rigen nunca cambian. Las estructuras dinámicas de datos crecen a medida que se ejecuta un programa, se amplia y contrae durante la ejecución del programa basada en los registros de almacenamiento de datos del programa.
Contestando a la pregunta no utilizaría pilas ni colas, pero si arreglos, siendo no tan necesario emplear ciclos de iteración vistos en la asignatura, como podremos observar en el siguiente código se utilizó un arreglo con sentencias condicionales tipo if, lo que nos permite la ejecución condicional de fragmentos de código. PHP dispone de una estructura if que es similar a la de C:.
$ip[0]= '111.222.333.444'; $ip[1]= '123.123.123.123'; $ip[2]= '5.111.123.11'; for ($i=0; $i<1; $i++) { if ($ip[0]=='111.222.333.444') { echo 'La IP: ' . $ip[0] . ' ,ha Realizado 13 Ataques' . '
'; } if ($ip[1]=='123.123.123.123') { echo 'La IP: ' . $ip[1] . ' ,ha Realizado 8 Ataques' . '
'; } if ($ip[2]=='5.111.123.11') { echo 'La IP: ' . $ip[2] . ' ,ha Realizado 5 Ataques' . '
'; } } ?>
Para declarar las clases que serían necesarias en el caso que quisiera trabajar con PHP pero con PPO (Programación Orientada a Objetos), utilizaríamos el siguiente código:
setVar(); $this->getVar(); } protected function getVar() { echo $this->var; } public function setVar() { $this->var = 'La IP mas Atacada es: 123.123.123.123' . '
'; }
} class Servicio extends Ip { function __construct() { $this->setVar(); $this->getVar(); } public function setVar() { $this->var = 'El Servicio mas Atacado es: FTP' . '
'; } } class Ataque extends Ip { function __construct() { $this->var = 'La IP: 123.123.123.123 , ha sido Atacada: 13 veces' . '
' . 'La IP: 111.222.333.444 , ha sido Atacada: 8 veces' . '
' . 'La IP: 5.111.123.11 , ha sido Atacada: 5 veces' . '
' ; $this->getVar(); } public function getVar() { echo $this->var; } } $Ip = new Ip(); $Servicio = new Servicio(); $Ataque = new Ataque(); Este seudocódigo se compone de la siguiente forma
La clase llamada “IP”, heredara dos subclases llamadas “Servicio y Ataque”.
Declarara varias variables que realizaran operaciones declaradas como “Var”.
Se creara un constructor en cada clase, siendo más que una función que será llamada cuando se crea una instancia de una clase tipo “new”.
Tiene un método modificador “set” en cada clase, el cual asignara un nuevo valor al atributo.
Tiene un método de acceso “get” en cada clase , el cual solo devolverá el valor del atributo.
Se crearon las clases heredadas de la clase madre, estas son la clase “servicio” y “Ataque”, a las cuales se le agrega la palabra “extends”, para lograr que la clase
sea extendida, una clase siempre será dependiente de una clase madre y la herencia múltiple no está soportada.
Bibliografía
Se crea el operador “new” para retornar la referencia automáticamente.
(Sin
Fecha).
Manual
de
PHP.
PHP.
Obtenido
03,
2018,
de
2018,
de
http://php.net/manual/es/index.php#index
(Sin
Fecha).
Funciones
de
strings.
PHP.
Obtenido
03,
http://php.net/manual/es/ref.strings.php
Delgado, R. (2012, 06). Estructuras Dinámicas de Datos. Programación en php. Obtenido 03, 2018, de
http://delgadorichardprogramacionenphp.blogspot.cl/2012/06/estructuras-dinamicas-de-
datos.html
Toca, D. (2017, 09). Qué son y para qué sirven las estructuras de datos. Platzi. Obtenido 03, 2018, de https://platzi.com/blog/estructuras-de-datos-que-son/
(2017, 01). Estructura de datos definición y tipos principales. Universidad Internacional de Valencia. Obtenido 03, 2018, de https://www.universidadviu.es/estructura-datos-definicion-tipos principales/
Garin, E. (2016, 08). Declaración de atributos, constructores, propiedades (get & set) y métodos de una clase en PHP.. Codeveloper. Obtenido 03, 2018, de http://codeveloperweb.com/declaracionde-atributos-constructores-propiedades-get-set-y-metodos-de-una-clase-en-php/
(Sin Fecha). IF. PHP. Obtenido 03, 2018, de http://php.net/manual/es/control-structures.if.php