Nueva pregunta

Pregunta:

Fecha: 03-07-2017 13:32:24 (En Español)

¿Cómo realizar un mapa de red por medio de un proyecto web?[Resuelta]

¡Hola!, ¿qué tal todos?.

¡Al punto!. Estoy realizando un proyecto que incluye conocimientos de redes.

Explicación del escenario
Existe una topología de red creada con máquinas virtuales, esto puede ser relativo (ya que podrían ser máquinas físicas), la filosofía es esa. Tengo un mapa de red elaborado en la herramienta GNS3, vinculada las máquinas con el virtualizador VirtualBox. Existen enrutadores que conectan distintas redes sobre la misma topología, el tipo de cableado es irrelevante para ésta práctica.

Problema
Necesito mostrar un mapa de red por medio de un proyecto WEB. Para realizar esto, sólo tengo que tener el nombre de las redes que existen en dicha topología, y a partir de ahí, hacer un broadcasting en la red cableada, para escalar los dispositivos en la red, para esto necesito que éstos dispositivos me den respuesta a las solicitudes, que estén en escucha.

Tengo opciones de hacerlo a puro Shell Script Bash, y con esto, hacer peticiones desde PHP a mencionados Scripts, pero he visto ciertas funciones y métodos de PHP que podrían funcionar para resolver este problema, claramente utilizaré base de datos para almacenar la información necesaria y a partir de ello, generar el mapa de red, claramente estoy utilizando bastante programación de lado del cliente para representarla con un buen gráfico. Tengo un par de ideas que puedo compartir, pero quisiera escuchar de momento.

Es un tema centralizado de lado del servidor.

Agradezco a todos los lectures por tomar algo de su tiempo para leer éstas ideas.

¡Saludos cordiales y feliz código!.
Etiquetas: Desafío - IPv4 - IPv6 - PHP - PHP Avanzado - Pregunta - Protocolos - Red - Web Votos: 0 - Respuestas: 2 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 25-08-2017 12:21:32 Encontraste información que te sirva?

    Personalmente me parece muy interesante lo que pones pero no tengo experiencia en el tema.

    Sería bueno si compartes cómo vas y una descripción general de cómo lo hiciste
      Votos: 0 - Link respuesta
     
  • Fecha: 27-03-2018 08:44:12 Hola, Ernesto ¿qué tal?.

    Logré terminar el proyecto y sí, hay mucha información, aunque un poco arrinconada.

    De forma general, lo que hice fue ponerme al día en temas de Sockets en PHP y realizar un Tracking Network, pero existe una mejor solución ya que cuenta con muchas cualidades, una construcción llamada NMap, esa herramienta para hacer rastreos de dispositivos en red.

    La cuestión es que con un sólo clic este pueda realizar el sondeo de red y muestre los dispositivos encontrados dibujando un mapa de red.

    Un problema viene acá, NMap no hace un rastreo de una infraestructura de red, me refiero a que no pasa más allá de un enrutador (Router), por lo que no se puede conocer la siguiente red, sólo puede encontrar los dispositivos de la red actual o pasada por parámetros, por lo que tenía que resolver ese problema. Se necesita hacer una función recursiva para que vaya a diferentes redes. Cierta complejidad aparece, y es que si no tengo las direcciones IP de red siguientes ¿cómo hago para conocerlas?. Es donde te das cuenta que tienes que recurrir a los Sockets, cuán filosofía es de Cliente - Servidor.

    Con la idea anterior, lo ideal es utilizar SNMP para éstos casos o al menos eso es lo que recomendaban algunos, pero ocasiona demasiado tráfico en la red, entonces, pensando en que a futuro podía gestionar estos dispositivos, decidí montarles SSH, la cuál tiene la misma filosofía de Sockets, por lo que ¿para qué montar muchos esclavos en las máquinas si puedo montar uno solo y más potente?, es ahí donde decidí hacerlo de esa manera. Tengo que decirlo, si se quiere gestionar un dispositivo, entonces se necesitarán las credenciales del equipo, por lo que sería un entorno controlado, así que utilicé SSH con cifrado RSA para tener acceso libre desde el servidor (donde corre Apache, PHP, MySQL, NMap, SSH Server y otros).

    Conocer los dispositivos conectados de las siguientes redes ya no es un gran problema. Primero conseguí la red en la que estoy conectado desde PHP, luego ésta se la pasé a NMap donde con funciones de ejecución de programas externos, le envié una instrucción Shell Script Bash que ejecuta a NMap con los parámetros de red para que haga un sondeo; luego de encontrar los dispositivos, los guardo en la base de datos y los recorro para acceder a él y ver las tablas de enrutamiento y poder averiguar si ese dispositivo es un enrutador o un host final, sabiendo que es un enrutador, consigo la red siguiente y hago lo mismo con los demás y así el bucle hasta que no existan más enrutadores y dispositivos por encontrar.

    La información que se generó, toda fue almacenada en la base de datos. Teniendo en cuenta que todo el procedimiento fue solicitado con Ajax, sólo queda que con los datos obtenidos, se dibuje la topología de red final, para esto utilicé la librería vis.js para la sección de network, donde sólo le monté la información y la lógica para conectarlos; y definir si se trata de un Switch, Router, Server o Host final de cliente.

    Las conexiones a los dispositivos para saber sus tablas de enrutamiento, las hago por medio de SSH, todo desde PHP, para eso hay que realizar algunas configuraciones en Apache y PHP para que todo funcione correctamente.

    Estoy seguro de que se me escapan muchas cosas, ese proyecto fue una gran experiencia.

    Compartiré el trozo de código que me tenía loco.
    public function TrackingNetwork(){
    			$this->InitTables();
    
    			do {
    				if (@!$this->getCountNetwork())
    					@$this->addNetwork($this->getIpRouteLocal());
    
    				if ($this->getAllNetworkChecked()->num_rows > 0){
    					$Network = $this->getAllNetworkChecked()->fetch_array(MYSQLI_ASSOC)['ip_net'];
    					$D = $this->SondearRed($Network);
    					unset($D[count($D) - 1]);
    
    					foreach ($D as $value) {
    						$ip_forward = @$this->IsRouter($value);
    						$ArrayNets = @explode("\n", $this->getIpRouteRemote($value));
    						
    						$NextNet = $ArrayNets[0];
    						$NextNet = "-";
    
    						if ($ip_forward){
    							$NextNet = $ArrayNets[1];
    							if (trim($Network) == trim($NextNet)){
    								$NextNet = "-";
    							} else {
    								$this->addNetwork($NextNet);
    							}
    						}
    
    						$this->addHost($Network, $value, $ip_forward, $NextNet);
    		    		}
    
    					$this->updateNetwork($Network, 1);					
    				}
    			} while ($this->getCountNetworkChecked());
    		}


    Probablemente no se entienda mucho, también hacen falta muchos métodos que aparecen ahí que no estoy escribiendo, pero es que es mucho, por eso compartiré el proyecto que tengo en GitHub. Estoy pensando en compartir un artículo completo sobre el proyecto en este portal.

    Proyecto en GitHub: NetworkMap, ese proyecto se quedó un poco limitado con esta filosofía, aunque lo estoy continuando para gestionar los dispositivos en red de una forma avanzada.
    Les comparto el siguiente por si quieren probarlo o aportar algo a la causa, además está mejor documentado: GNet (Sistema de Gestión de Red)

    PHP es una gran experiencia, no le encuentro límites, por eso sigo trabajando con él.

    Gracias por interesarte en leerme colega. ¡Saludos cordiales!
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión