93 lines
3.4 KiB
PHP
93 lines
3.4 KiB
PHP
<?php
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage discovery
|
|
* @copyright (C) Adam Armstrong
|
|
*
|
|
*/
|
|
|
|
// Keep this os detect here!
|
|
// for detect as last turn (when other definitions not detected)
|
|
|
|
if ($os) {
|
|
return;
|
|
}
|
|
|
|
if (str_starts($sysObjectID, '.1.3.6.1.4.1.8072.3.2.10') ||
|
|
str_starts($sysDescr, 'Linux')) {
|
|
$os = 'linux';
|
|
}
|
|
|
|
if ($os === 'linux') {
|
|
// Now network based checks
|
|
if (str_starts($sysObjectId, [ '.1.3.6.1.4.1.10002.1', '.1.3.6.1.4.1.41112.1.4' ]) ||
|
|
str_contains(snmp_getnext_oid($device, 'dot11manufacturerName', 'IEEE802dot11-MIB'), 'Ubiquiti')) {
|
|
$os = 'airos';
|
|
if (str_contains(snmp_getnext_oid($device, 'dot11manufacturerProductName', 'IEEE802dot11-MIB'), 'UAP')) {
|
|
$os = 'unifi';
|
|
} elseif (!safe_empty(snmp_get_oid($device, 'fwVersion.1', 'UBNT-AirFIBER-MIB'))) {
|
|
$os = 'airos-af';
|
|
}
|
|
return;
|
|
}
|
|
|
|
$sysName = snmp_cache_oid($device, 'sysName.0', 'SNMPv2-MIB');
|
|
if (str_contains($sysDescr, 'OpenWrt') || str_icontains_array($sysName, [ 'OpenWrt', 'rt-is-prober', 'HeartOfGold' ])) {
|
|
$os = 'openwrt';
|
|
return;
|
|
}
|
|
|
|
if ($sysObjectID === '.1.3.6.1.4.1.8072.3.2.10') {
|
|
if (preg_match('/^Linux (?!Solar)\S+ \d[\d\.]+ #\d+ .* (aarch64|arm|mips|ppc|i586|i686|x86)/', $sysDescr) &&
|
|
snmp_get_oid($device, 'dot11ResourceTypeIDName.0', 'IEEE802dot11-MIB') === 'RTID') {
|
|
// Linux OpenWrt 3.10.14 #132 SMP Fri Dec 8 10:13:11 KST 2017 mips
|
|
// Linux hostname 4.14.221 #0 Mon Feb 15 15:22:37 2021 armv6l
|
|
// Linux wrt2 5.15.134 #0 SMP Mon Oct 9 21:45:35 2023 aarch64
|
|
$os = 'openwrt';
|
|
return;
|
|
}
|
|
|
|
if (snmp_get_oid($device, '.1.3.6.1.4.1.9839.1.2.0') > 0) {
|
|
// NOTE! This is very hard hack for detect some devices connected to Carel pCOweb
|
|
// carel-denco.snmprec:1.3.6.1.4.1.9839.2.1.2.6.0|2|0
|
|
// carel-dimplex.snmprec:1.3.6.1.4.1.9839.2.1.2.6.0|2|-9999
|
|
// carel-crac1.snmprec:1.3.6.1.4.1.9839.2.1.2.6.0|2|425
|
|
// carel-crac2.snmprec:1.3.6.1.4.1.9839.2.1.2.6.0|2|462
|
|
$carel_test = snmp_get_oid($device, '.1.3.6.1.4.1.9839.2.1.2.6.0');
|
|
if ($carel_test > 0 && strlen($carel_test) > 1) {
|
|
$os = 'pcoweb-crac';
|
|
return;
|
|
}
|
|
|
|
// carel-denco.snmprec:1.3.6.1.4.1.9839.2.1.2.16.0|2|500
|
|
// carel-dimplex.snmprec:1.3.6.1.4.1.9839.2.1.2.16.0|2|0
|
|
// carel-crac1.snmprec:1.3.6.1.4.1.9839.2.1.2.16.0|2|0
|
|
// carel-crac2.snmprec:1.3.6.1.4.1.9839.2.1.2.16.0|2|0
|
|
$carel_test = snmp_get_oid($device, '.1.3.6.1.4.1.9839.2.1.2.16.0');
|
|
if ($carel_test > 0 && strlen($carel_test) > 1) {
|
|
$os = 'pcoweb-denco';
|
|
return;
|
|
}
|
|
|
|
// FIXME. This is also incorrect, but we not have other test units
|
|
// carel-denco.snmprec:1.3.6.1.4.1.9839.2.1.2.3.0|2|180
|
|
// carel-dimplex.snmprec:1.3.6.1.4.1.9839.2.1.2.3.0|2|529
|
|
// carel-crac1.snmprec:1.3.6.1.4.1.9839.2.1.2.3.0|2|0
|
|
// carel-crac2.snmprec:1.3.6.1.4.1.9839.2.1.2.3.0|2|0
|
|
$os = 'pcoweb-chiller';
|
|
return;
|
|
}
|
|
|
|
// if (!safe_empty(snmp_get_oid($device, 'upsIdentModel.0', 'UPS-MIB'))) {
|
|
// $os = 'generic-ups';
|
|
// return;
|
|
// }
|
|
}
|
|
}
|
|
|
|
// EOF
|