Skip to content

Instantly share code, notes, and snippets.

@leapar
Created April 27, 2017 07:18
Show Gist options
  • Save leapar/fc669258399e58dbdd679019434249fd to your computer and use it in GitHub Desktop.
Save leapar/fc669258399e58dbdd679019434249fd to your computer and use it in GitHub Desktop.
snmp top

snmp数据采集以及发现

@leapar
Copy link
Author

leapar commented Apr 27, 2017

服务主机发现

  1. ping
    根据ip段 192.168.1.0/24扫描,进行fping
  2. snmp探测
    获取sysName.0和sysObjectID.0
    根据设置的community进行snmp扫描,指定snmp版本,如果不指定,那么要扫描三次v1 2c v3。
    扫描成功以后,把服务器的基本信息保存数据库中。
    参考snmp-scan.php
    这个时候分动态ip与固定ip,如果是固定ip那么如果数据库中有该ip那么不进行上面的两个步骤。
    如果是动态ip,上面的步骤还需要,根据snmp采集的hostname为主键进行其他信息更新例如ip地址等。

@leapar
Copy link
Author

leapar commented Apr 27, 2017

系统信息采集

参考discovery.php

  1. 从数据库中取出上面发现的主机循环发现
  2. 主机是否存活
    1. 是否可以fping
    2. snmp是否正常可以获取sysObjectID.0
$config['discovery_modules']['os']                   = 1;
$config['discovery_modules']['ports']                = 1;
$config['discovery_modules']['ports-stack']          = 1;
$config['discovery_modules']['entity-physical']      = 1;
$config['discovery_modules']['processors']           = 1;
$config['discovery_modules']['mempools']             = 1;
$config['discovery_modules']['cisco-vrf-lite']       = 1;
$config['discovery_modules']['cisco-mac-accounting'] = 0;
$config['discovery_modules']['cisco-pw']             = 0;
$config['discovery_modules']['cisco-vrf']            = 0;
$config['discovery_modules']['cisco-cef']            = 0;
$config['discovery_modules']['cisco-sla']            = 0;
$config['discovery_modules']['cisco-cbqos']          = 0;
$config['discovery_modules']['cisco-otv']            = 0;
$config['discovery_modules']['ipv4-addresses']       = 1;
$config['discovery_modules']['ipv6-addresses']       = 1;
$config['discovery_modules']['route']                = 0;
$config['discovery_modules']['sensors']              = 1;
$config['discovery_modules']['storage']              = 1;
$config['discovery_modules']['hr-device']            = 1;
$config['discovery_modules']['discovery-protocols']  = 1;
$config['discovery_modules']['arp-table']            = 1;
$config['discovery_modules']['discovery-arp']        = 0;
$config['discovery_modules']['junose-atm-vp']        = 0;
$config['discovery_modules']['bgp-peers']            = 1;
$config['discovery_modules']['vlans']                = 1;
$config['discovery_modules']['vmware-vminfo']        = 0;
$config['discovery_modules']['libvirt-vminfo']       = 0;
$config['discovery_modules']['toner']                = 0;
$config['discovery_modules']['ucd-diskio']           = 1;
$config['discovery_modules']['applications']         = 0;
$config['discovery_modules']['services']             = 1;
$config['discovery_modules']['stp']                  = 1;
$config['discovery_modules']['ntp']                  = 1;
$config['discovery_modules']['loadbalancers']        = 0;
$config['discovery_modules']['mef']                  = 0;
  1. 操作系统版本获取
    1. 根据yaml配置文件推测系统
function checkDiscovery($array, $sysObjectId, $sysDescr)
{
    // all items must be true
    foreach ($array as $key => $value) {
        if ($check = ends_with($key, '_except')) {
            $key = substr($key, 0, -7);
        }
        if ($key == 'sysObjectId') {
            if (starts_with($sysObjectId, $value) == $check) {
                return false;
            }
        } elseif ($key == 'sysDescr') {
            if (str_contains($sysDescr, $value) == $check) {
                return false;
            }
        } elseif ($key == 'sysDescr_regex') {
            if (preg_match_any($sysDescr, $value) == $check) {
                return false;
            }
        } elseif ($key == 'sysObjectId_regex') {
            if (preg_match_any($sysObjectId, $value) == $check) {
                return false;
            }
        }
    }
    return true;
}
2. 循环加载所有os的检测版本os/****.php全部推测一次,谁成功算谁

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment