Descripcion:
sniffer.sh - Inicio de Archivo
---------------------------------------------------------------------------------------------------
#!/bin/bash
#script inspirado en el creado por: franklin aliaga
#script mejorado y actualizado por: Ivan Vergés (microstudi)
#script modificado para el ingreso a la Base de datos: KZ DR
#declaracion de arrays
declare -a IPS_CONOCIDAS
####################
#Configuracion:
####################
#Array de ip's conocidas, la primera debe ser la del router, no hace falta poner la propia
#separar por espacios las ips
IPS_CONOCIDAS=( "192.168.0.0" )
#Array de MAC's conocidas (para que no liste las direcciones DHCP de ordenadores conocidos)
#para conocer una MAC, usar el comando "arp IP"
#separar por espacios las macs
#Interfaz de red (eth0, wlan0, etc)
#Mascara de red (24=255.255.255.0, 16=255.255.0.0)
#Mi red es de 19 Bits
MASK=19
#####################
#Menu de opciones
#aqui obtenemos la nuestra ip
#if [ ! $LOG ]; then
#echo "Mi ip: $ip"
#fi
#añadimos nuestra IP al array
IPS_CONOCIDAS[${#IPS_CONOCIDAS[*]}]=$ip
#if [ ! $LOG ]; then
#echo "No se controlan los equipos siguientes: "${IPS_CONOCIDAS[*]}
#if [ "${MACS_CONOCIDAS[*]}" != "" ] && [ ! $NOMAC ]; then
# echo "No se controlan los equipos con las MAC siguientes: "${MACS_CONOCIDAS[*]}
#fi
#fi
IPS_MAQUINA='192.168.31.6/32'
#ComproBar si existen los programas que usaremos:
if [ ! -x /usr/bin/nmap ]; then
echo "El programa nmap no está instalado!"
exit
fi
#con este comnado de nmap nos muestra los hosts conectados
#y los guarda en el fichero "-" que es la salida standard
#redireccionada a la variable variable HOST_IPS
/usr/bin/nmap -sP -n --exclude $IPS_MAQUINA ${IPS_CONOCIDAS[0]}/$MASK | sed '/#/d' - | sed '/Nmap/d' - | sed '/^$/d' - > /tmp/tmp1
/usr/bin/awk 'BEGIN {x=0}
{
if (x<2) {
printf("%s",$0)
x=x+1
}
if (x==2) {
printf("\n")
x = 0
}
}' /tmp/tmp1 > /tmp/tmp2
HOST_IPS=$(</tmp/tmp2)
rm -rf /tmp/tmp1
rm -rf /tmp/tmp2
rm -rf /root/lista_export.txt
#aqui cortamos el formato obtenido anteriormente de archivo para solo obtener las ip's
IPS=$(echo "$HOST_IPS" | awk '{print $2}' )
MAC1=$(echo "$HOST_IPS" | grep Host )
#aqui capturamos el numero de lineas que tiene nuestro archivo
#en este caso la cantidad de ip's que hay en el archivo "-" (entrada standard)
contador=$(echo "$IPS" | wc -l - )
contador=$(echo "$contador" | cut -f1 -d "-" )
total=$(expr $contador - 1)
#esto es para que el script tenga acceso a las X des de crontab
#Bucle de búsqueda entre las ip's encontradas
var=0
while [ $var -le $total ]; do
let var=$var+1
#capturamos la ip por linea
linea=$(echo "$IPS" | sed -n "$var p")
MAC=$(echo "$MAC1" | sed -n "$var p" | awk '{print $8}' )
echo "$linea|$MAC" >> lista_export.txt
done
//Se exporta al archivo lista_export.txt para luego ser ingresado a la base de datos
/usr/local/Zend/Core/bin/php /usr/local/Zend/apache2/htdocs/sistemas/net-sistema.php > /dev/null 2>&1
---------------------------------------------------------------------------------------------------
Fin de Archivo
net-sistema.php - Inicio de archivo
---------------------------------------------------------------------------------------------------
<?php
function dame_un_dato($query)
{
include('connect.php');
$stid = oci_parse($conn, $query);
oci_execute($stid, OCI_DEFAULT);
$row = oci_fetch_array($stid , OCI_RETURN_NULLS);
return $row[0];
}
/////////////////////////////////////////////////////////
include ('connect.php');
$archivo = file('/root/lista_export.txt');
//////////////////////////////////////
// DEVUELVE COD_NETWORK + 1
$s_cod_network = dame_un_dato("SELECT lpad( NVL(MAX(mae.Cod_Network),0)+1,6,'0') FROM net_lan_cab mae");
//////////////////////////////////////
$CantPc=0;
foreach($archivo as $linea => $contenido) {
++$CantPc;
}
$queryCAB = "insert into net_lan_cab (cod_network,fec_registro,cant_equi_encendidos) VALUES ('$s_cod_network',sysdate,$CantPc)";
$stid = oci_parse($conn, $queryCAB);
if (!$stid) {
$e = oci_error($conn);
print htmlentities($e['message']);
exit;
}
$r = oci_execute($stid, OCI_DEFAULT);
if (!$r) {
$e = oci_error($stid);
echo htmlentities($e['message']);
exit;
}
$committed = oci_commit($conn);
/////////////////////////////////////////////////
$num_id=0;
foreach($archivo as $linea => $contenido) {
$i=0;
$num_ip="";
$num_mac="";
++$num_id;
$array = explode('|', $contenido);
foreach($array as $columna) {
if ($i == 0 ) {
$num_ip=trim($columna);
}else{
$num_mac=trim($columna);
}
++$i;
}
$queryDET = "insert into net_lan_det (cod_network, num_ip, num_mac,num_id) VALUES ('$s_cod_network','$num_ip','$num_mac',$num_id)";
$stid = oci_parse($conn, $queryDET);
if (!$stid) {
$e = oci_error($conn);
print htmlentities($e['message']);
exit;
}
$r = oci_execute($stid, OCI_DEFAULT);
if (!$r) {
$e = oci_error($stid);
echo htmlentities($e['message']);
exit;
}
$committed = oci_commit($conn);
}
?>
---------------------------------------------------------------------------------------------------
Fin de archivo
connect.php - Inicio de archivo
---------------------------------------------------------------------------------------------------
<?
$Servidor = '//ip-servidor/oraclesid'; //suele ser localhost
$Usuario = "user"; //usuario de la base de datos
$Password = "user"; //contraseña de la base de datos
$conn=oci_connect($Usuario,$Password,$Servidor) or die("</br><Strong>Disculpen las molestias. Estamos trabajando para usted...</Strong>");
if (!$conn) {
$e = oci_error();
print htmlentities($e['message']);
exit;
}
?>
---------------------------------------------------------------------------------------------------
Fin de archivo
crontab -e
* * * * * /usr/sbin/sniffer.sh
Estructura de las 2 tablas
cabecera - (net_lan_cab) cod_network , fec_registro , cant_equi_encendidos
detalle - (net_lan_det) cod_network , num_ip , num_mac , num_id





