SNMP es un protocolo de red que permite obtener una gran cantidad de información del dispositivo que lo tenga activo. Actualmente cualquier dispositivo con una interfaz de red cuenta con la posibilidad de activar un demonio SNMP que permita al administrador acceder a la información del mismo e incluso modificarla de forma remota.
Para los sistemas Linux basta con hacer:
snmpwalk -Os -v2c -c public ip_del_dispositivo > ip_del_dispositivo.walkEs conveniente redirigir la salida a un fichero por la enorme cantidad de información que se recibe.
Como cosa curiosa he comprobado que obtengo más información si empleo un punto como OID. Suponía que snmpwalk sin OID devolvería todo el árbol completo ¿?.
snmpwalk -Os -v2c -c public ip_del_dispositivo . > ip_del_dispositivo.walk
Bajo Windows se puede emplear un equivalente mediante PHP. Una vez bajado y descomprimido en
C:\PHPHay que modificar el
php.ini:
- Descomentar
php_snmp.dll- Descomentar
php_sockets.dll- Hacer
extensión_dir=”c:\php\ext”
Añadir en variables de entorno de sistema el path:
c:\phpAñadir en variables de entorno de sistema:
mibdirs como
c:\php\extras\mibsEn el Notepad creamos y guardamos como
snmpwalk_report.php lo siguiente:
#!/usr/bin/php
<?php
$string = "public";
$host = "$argv[1]";
check_snmp($host);
spitinfo($host);
function check_snmp($box) //primero comprueba que el host tiene
//activo snmp
{
$string="public";
$infocheck = @snmpget("$box", "$string", "system.sysDescr.0");
if(! $infocheck)
{
die("SNMP no esta activo en el host: $box\n");
}
else
{
return $infocheck;
}
}
function spitinfo($host)//obtiene y muestra datos de snmp.
{
$string = "public";
$hostinfo = @snmpget("$host","$string","system.sysDescr.0");
list ($k)=array(split(" ", $hostinfo));
$os = $k[0];
$hostname = @snmpget("$host","$string","system.sysName.0");
$user = @snmpget("$host","$string","system.sysContact.0");
$location = @snmpget("$host","$string","system.sysLocation.0");
$macaddr = @snmpget("$host","$string","interfaces.ifTable.ifEntry.ifPhysAddress.2");
$ethstatus = @snmpget("$host","$string","interfaces.ifTable.ifEntry.ifOperStatus.2");
$ipfwd = @snmpget("$host","$string","ip.ipForwarding.0");
$ipaddr = @gethostbyname("$host");
$info=array("Hostname:"=>"$hostname","Contact:"=>"$user",
"Location:"=>"$location","OS:"=>"$os","MAC Address:"=>
"$macaddr","IP Address:"=>"$ipaddr","Network Status:"=>
"$ethstatus",
"Forwarding:"=>"$ipfwd");
echo "\nTCP Port Summary\n";
tabdata($info);
print "\nTCP Port Summary\n";
snmp_portscan($hostname);
echo "\nOtra forma\n";
$a = snmpwalk("127.0.0.1", "public", "system");
for ($i=0; $i
$value)
{
if($label){
print "$label\t";
}else{
print "Not Available\t";
}
if($value){
print "$value\n";
}else{
print "Not Available\n";
}
}
}
function snmp_portscan($target)
{
$listen_ports=snmpwalk("$target","public",".1.3.6.1.2.1.6.13.1.3.0.0.0.0");
foreach($listen_ports as $key=>$value)
{
print "TCP Port $value (" . getservbyport($value, 'tcp') . ") listening \n";
}
}?>
Solo hay que hacer en linea de comandos >php snmpwalk_report.php ip_remoto
En la salida hay varios ejemplos de cómo extraer la información, algunos redundantes, pero sirven como ejemplo y modelo.
Como programas gratuitos podemos usar los
Getif en http://www.wtcs.org/snmp4tpc/getif.htm
Y el impagable
Dude en http://wiki.mikrotik.com/wiki/Dude_windows_installation