Archivos Mensuales: abril 2017

phpipam: Mola mucho

Hace muchas, muchas lunas, tenía toda la red documentada con un MediaWiki. Incluso hice una ñapilla para recoger las descripciones de los puertos de los switches y generar con ellas una tabla automáticamente; la mandé a la lista de ExNIC hace ocho años:

Aquí os dejo una pequeña barbudez que he parido. Se trata de una extensión para MediaWiki que saca una tabla de interfaces de un trasto de Cisco; está pensado para switches. Disculpad los comentarios en espanglis y demás, resultado de copiar y pegar ejemplos de acá y allá.

Para hacerlo funcionar, hay que:

1. Ponerlo en un sitio adecuado (típicamente, extensions/tablainterfaces/tablainterfaces.php)
2. Añadirlo como extensión (añadir a LocalSettings.php, normalmente al final:

require_once «$IP/extensions/tablainterfaces/tablainterfaces.php»;

3. Meter en el código de la página que sea la llamada

{{#tablainterfaces:nombredeltrasto | community }}

(obviamente, nombredeltrasto puede ser un nombre o dirección IP, y es recomendable una community con solamente permiso de lectura).

Se admiten sugerencias.

Cuidado con los saltos de línea que introduce el editor de correo. Salud.

<?php

# Funcion de enganchar
$wgExtensionFunctions[] = ‘Iniciar_Tabla_Interfaces’;
# Add a hook to initialise the magic word
$wgHooks[‘LanguageGetMagic’][]       = ‘ElParseador_Magico’;

function Iniciar_Tabla_Interfaces() {
global $wgParser;
# Enlazar la palabra ‘tablainterfaces’ con nuestra funcion
$wgParser->setFunctionHook( ‘tablainterfaces’, ‘EscupirTablaInterfaces’ );
}

function ElParseador_Magico(&$magicWords, $langCode ) {
# Add the magic word
# The first array element is case sensitive, in this case it is not case sensitive
# All remaining elements are synonyms for our parser function
$magicWords[‘tablainterfaces’] = array( 0, ‘tablainterfaces’ );
# unless we return true, other parser functions extensions won’t get loaded.
return true;
}

function EscupirTablaInterfaces(&$parser, $dispositivo = », $community = » ) {
# The input parameters are wikitext with templates expanded
# The output should be wikitext too
# Codigo SNMP inspirado por jmartinson(AT_nospam)info234.com en php.net

// Solamente valores. Sin esto, devuelve el tipo tambien, p.e.: INTEGER: 1
snmp_set_quick_print(TRUE);

// For sequence types, return just the numbers, not the string and numbers.
// snmp_set_enum_print(TRUE);

// Don’t let the SNMP library get cute with value interpretation.  This makes
// MAC addresses return the 6 binary bytes, timeticks to return just the integer
// value, and some other things.
// snmp_set_valueretrieval(SNMP_VALUE_PLAIN);

$ifIndex = snmp2_walk(«$dispositivo»,»$community»,»interfaces.ifTable.ifEntry.ifIndex»);
$ifDescr = snmp2_walk(«$dispositivo»,»$community»,»interfaces.ifTable.ifEntry.ifDescr»);
$ifAdminStatus = snmp2_walk(«$dispositivo»,»$community»,»interfaces.ifTable.ifEntry.ifAdminStatus»);
$ifOperStatus = snmp2_walk(«$dispositivo»,»$community»,»interfaces.ifTable.ifEntry.ifOperStatus»);

$tabla =  ‘{| border=»0″‘.»\n»;
$tabla .= » |+ Tabla de interfaces de $dispositivo\n»;
$tabla .= » ! Puerto !! Descripci&oacute;n !! Estado oper. !!
Estado adm.\n»;
$tabla .= » |-\n»;

for ($i=0; $i<count($ifIndex); $i++) {
$tabla .= » | $ifDescr[$i]\n»;
$tabla .= » | «.snmp2_get(«$dispositivo»,»$community»,»IF-MIB::ifAlias.».$ifIndex[$i]).»\n»;

$tabla .= » | $ifOperStatus[$i]\n»;
$tabla .= » | $ifAdminStatus[$i]\n»;
$tabla .= » |-\n»;
}

$tabla .= » |}\n»;

return $tabla;
}
?>

El tiempo no pasa en balde, y aquella ñapilla que iba bien para tres o cuatro armarios con un puñado de switches en total, ya no llega. No solo por su inexistente modelo de seguridad; es que no creo que nadie la haya probado en Mediawikis más modernos que la versión de hace ocho años.

Afortunadamente, existe Eslovenia. La «Suiza del Este» ha dado su cuota de gente interesante, pero de particular interés hoy es un tipo llamado Miha Petkovsek.

El hijo de su ingenio, phpipam, es justo lo que su nombre da a entender: Una aplicación en php, sencillita pero pulcramente escrita, que permite llevar un inventario de las direcciones IP. En versiones recientes, también cuenta con un sencillo, casi rudimentario, pero útil, inventario de equipos; incluyendo coordenadas tales como ubicación geográfica, armario y U. ¿A que mola?

Phpipam tiene, por supuesto, su API REST que permite engancharlo (a base de wget si es menester) con los escriptillos y ñapillas diversas que adornan cualquier NOC que en la vida es.

La instalación no puede ser más sencilla; usa una base de datos MySQL, como la mayor parte de este tipo de aplicaciones. Se colocan los ficheros en su sitio, se configura el acceso a la base de datos, y a correr.