Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Instituto IACC
JORGE DONOSO S
17-03-2017
Usted trabaja para una agencia gubernamental de seguridad y ha notado ataques
informáticos a sus servidores. El archivo de logs de su cortafuego tiene líneas de este
estilo:
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 haciendo el ataque, la cual puede ver a
continuación:
{//Inicia la función
$ipOrigen =' '; //Se declara la variable ipOrigen como una cadena vacía
$primerBlanco = stripos($cadena,' '); /*Se ubica el primer blanco de la cadena con la función stripos
de PHP, pues al analizar el archivo de logs, se observa que a partir del primer blanco empieza la IP
que realiza el ataque, justamente la que se busca para esta función*/
$primerGuion = stripos($cadena,'-'); /*Se ubica el primer guión de la cadena con la función stripos
de PHP, pues al analizar el archivo de logs, se observa que la IP que origina el ataque culmina antes
de ese primer guión*/
echo 'La IP desde donde se hace el ataque es: ' . $ipOrigen . '<br>'; //se imprime la IP obtenida
}
?>
Para hacer la prueba con la primera línea del archivo de logs se ejecuta luego de la función
la siguiente instrucción:
DESARROLLO:
1.- Tomando como base la función anteriormente descrita, escriba las siguientes
funciones en PHP o pseudocódigo:
R:
<?php
function IpReceptoraAtaque ($cadena) {
$ipReceptora = '';
$ultimoEspacio = strripos($cadena,' ');
$ultimoGuion = strripos($cadena,'-');
$ipReceptora = substr($cadena, $ultimoEspacio, ($ultimoGuion -
$ultimoEspacio));
echo '<h4> La IP Atacada es: ' . $ipReceptora . '</h4><br>';
}
IpReceptoraAtaque('Desde 111.222.333.444-Conexión hacia 1.1.1.1-Web');
IpReceptoraAtaque('Desde 123.123.123.123-Conexión hacia 2.2.2.2-FTP');
IpReceptoraAtaque('Desde 5.111.123.11-Conexión hacia 1.2.1.2-SSH');
R:
<?php
function servicioAtacado($cadena) {
$servicio = '';
$ultimoGuion = strripos($cadena,'-');
$servicio = substr($cadena, $ultimoGuion + 1);
echo 'El servicio atacado es: '.$servicio.'<br>';
}
servicioAtacado('Desde 111.222.333.444-Conexión hacia 1.1.1.1-Web');
servicioAtacado('Desde 123.123.123.123-Conexión hacia 2.2.2.2-FTP');
servicioAtacado('Desde 5.111.123.11-Conexión hacia 1.2.1.2-SSH');
2.-Explique brevemente las instrucciones necesarias para trabajar con el archivo que
guarda la información de ataques informáticos.
R:
3.- 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:
R:
Para conocer las IP que más han intentado atacar se debe leer el archivo de log e ir
llenando un arreglo donde se va registrando la IP como la clave y la cantidad de veces que
aparece como su valor (aumentando cada vez que aparece). Para la lectura del archivo se
utiliza la estructura de iteración while, que realizará el guardado en el arreglo mientras
aún no sea el fin del archivo.
Finalmente se recorre el arreglo resultante con un ciclo for para ir mostrando el mensaje
solicitado utilizando el par clave/valor.
En código PHP:
<?php
function conocerIpOrigenAtaque ($cadena) { // Se modificó para que solamente
devuelva la IP.
$ipOrigen =' ';
$primerBlanco = stripos($cadena,' ');
$primerGuion = stripos($cadena,'-');
$ipOrigen = substr($cadena, $primerBlanco + 1, ($primerGuion -
$primerBlanco - 1));
return $ipOrigen;
}
$archivo = fopen("ataques.log", 'r'); // Lectura del archivo de logs.
$final = array();
$ip = "";
while ($linea = fgets($archivo)) {
$ip = conocerIpOrigenAtaque($linea);
If (array_key_exists($ip, $final))
$final[$ip]++;
else
$final[$ip] = 1;
}
fclose($archivo);
foreach($final as $ipAtaque => $ipCantidad) {
echo $ipAtaque . " ha realizado " . $ipCantidad . " ataques.\n";
}
?>
4.-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
R:
<?php
class Archivo {
var $ubicacion;
function _construct($ubicacion) {
$this->ubicacion = $ubicacion;
fclose($archivo);
class Ataque {
var $archivo;
var $final;
function _construct($ubicacion) {
$this->archivo->_construct($ubicacion);
$this->final = array();
$this->llenarArreglo();
ataques.\n";
$archivo = $this->archivo->abrirArchivo();
while ($linea = fgets($archivo)) {
$ip = $this->conocerIpOrigenAtaque($linea);
if(array_key_exists($ip, $this->final))
$this->final[$ip]++;
else
$this->final[$ip] = 1;
$this->archivo->cerrarArchivo($archivo);
$primerGuion = stripos($cadena,'-');
$primerBlanco-1));
$ataque->_construct("ataques.log");
$ataque->mostrarMensajes();
Referencias: