89 lines
2.7 KiB
PHP
89 lines
2.7 KiB
PHP
#!/usr/bin/php
|
|
<?php
|
|
// Generate snmpwalk of unknown devices
|
|
// requires: snmpwalk from Net-SNMP
|
|
chdir(dirname($_SERVER["SCRIPT_FILENAME"]));
|
|
|
|
include ("../../../inc/includes.php");
|
|
|
|
$snmpwalkCmd = "snmpwalk";
|
|
// $snmpwalkCmd = "ssh 192.168.14.128 --";
|
|
// you can launch snmpwalk on a remote machine through ssh:
|
|
// tunnel="0",command="/usr/bin/snmpwalk $SSH_ORIGINAL_COMMAND" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0FqlGjmx6IxuPihc1B1zN1gTnGZoQs1SenUaRkmUD+gbUWbfhUBbPRJIIFicNjsr6toerAQM/YKfZnmYG5BnYKgJPbKdkpdrSTMwSUqccDFH8tu6lIoRFiqZgajIznUls3Mhz5B4JXErapbQN/7cWnpvuG8vdZu56N19T0/gYdlTf8a71liva20zBk+y+pdWWsd4l2zBLm6tkmMWqYL/Xj/jY92gLzY0Dm0IFiBfV9gk4UBWh6jycLBZGbdqx25XqK8L8Ob9oyhJhtsCNeft1c6xzNAM21WYH4/trtwYgHaEA1LLN4IbY9+lJfJamN9ii4acyfMz/J+lQsnw3yTlOw== root@mysnmpmachine
|
|
|
|
$outputDir = GLPI_PLUGIN_DOC_DIR.'/fusioninventory/walk';
|
|
|
|
if (mkdir($outputDir) && !is_dir($outputDir)) {
|
|
echo("Failed to create $outputDir\n");
|
|
exit(1);
|
|
}
|
|
|
|
$t = system(sprintf("%s --version", $snmpwalkCmd));
|
|
if (!strncmp("/NET-SNMP/", $t, 7)) {
|
|
echo "[error] snmpwalk not found. please install snmpwalk from Net-SNMP package\n";
|
|
exit(1);
|
|
}
|
|
|
|
$sql = "
|
|
|
|
SELECT
|
|
DISTINCT(ip),sysdescr,snmpversion,community
|
|
FROM
|
|
glpi_plugin_fusinvsnmp_unmanageds,
|
|
glpi_networkports,
|
|
glpi_plugin_fusioninventory_configsecurities
|
|
WHERE
|
|
glpi_plugin_fusinvsnmp_unmanageds.plugin_fusioninventory_snmpmodels_id<1
|
|
AND
|
|
sysdescr IS NOT NULL
|
|
AND
|
|
glpi_networkports.itemtype='PluginFusioninventoryUnmanaged'
|
|
AND
|
|
glpi_networkports.items_id=plugin_fusioninventory_unmanageds_id
|
|
AND
|
|
length(glpi_networkports.ip)>1
|
|
AND
|
|
glpi_plugin_fusioninventory_configsecurities.id=glpi_plugin_fusinvsnmp_unmanageds.plugin_fusinvsnmp_configsecurities_id
|
|
|
|
";
|
|
$result = $DB->query($sql);
|
|
while ($host=$DB->fetchArray($result)) {
|
|
|
|
$filePath = sprintf("%s/%s-%s.walk", $outputDir, $host['ip'], preg_replace('/[^a-zA-Z0-9,_-]/', '_', $host['sysdescr']));
|
|
|
|
switch ($host['snmpversion']) {
|
|
case 1:
|
|
$snmpversion = '1';
|
|
break;
|
|
case 2:
|
|
$snmpversion = '2c';
|
|
break;
|
|
default:
|
|
printf("unsupported SNMP version: '%s'\n", $host['snmpversion']);
|
|
continue;
|
|
}
|
|
|
|
$cmd = sprintf("%s -v %s -t 30 -Cc -c %s %s .1", $snmpwalkCmd, $snmpversion, $host['community'], $host['ip']);
|
|
// print $cmd."\n";
|
|
printf("---\nscanning %s\n", $host['ip']);
|
|
|
|
$fileFd = fopen($filePath, "w");
|
|
$cmdFd = popen($cmd, "r");
|
|
|
|
while (!feof($cmdFd)) {
|
|
fwrite($fileFd, fgets($cmdFd));
|
|
}
|
|
print "done\n";
|
|
|
|
pclose($cmdFd);
|
|
fclose($fileFd);
|
|
|
|
$st = stat($filePath);
|
|
if ($st['size'] == 0) {
|
|
unlink($filePath);
|
|
} else {
|
|
printf("file %s generated\n", $filePath);
|
|
}
|
|
|
|
}
|