netdisco 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28828f1c4a9ea76913a62e8002ca52ab2ba60b48385498d74d098f70f6191617
4
- data.tar.gz: 0f4a7520e59a92e6445a7a5c476af54f8574d3eceadcf3ba78f4ee8a3f53784d
3
+ metadata.gz: 16f405c4657e51cf5421806990865bd05c46bc2a887e7ac022897f643449879a
4
+ data.tar.gz: 801394ad4dfcea976618f1f5b3af828037ee15e2aef7c4ccc93d93cacd6e6ccc
5
5
  SHA512:
6
- metadata.gz: 611d94c94cef2155d5b9b56485782d982688272875df2d212c53521bdf9df930644a40c6638def6f3ed5309a4240c7183e0b79328ae41e82ea6aa31a56318c04
7
- data.tar.gz: bebf0a503838a21f642e21a7809cea61f41de5343c156d001a08257590c7ef22bcf3fd9cf1e2a61bcc389dd1deca7e783443c07fb028a3ca5a3de370a4041e77
6
+ metadata.gz: 2838bd2e666ebc42f955cff1237f7c10bd498a6b465fa17cfd2598de86916a529af9b2aa403f5ebf62222edc885df38a2b2f926dc86628504215928755cf78cf
7
+ data.tar.gz: 933cb0a3bac7681e1ce452817ec02317565eddefdd3e631a4c08da13fa1573854b26af7ee027501ac1adf31fba2a298e99c2eb71efe8dcce54aa13de8633b2e9
data/lib/netdisco/cli.rb CHANGED
@@ -11,7 +11,7 @@ class Netdisco
11
11
 
12
12
  # 网络邻居发现入口函数
13
13
  def run
14
- Log.debug "Running Netdisco.new.discover ..."
14
+ Log.debug "RUNNING Netdisco.new.discover"
15
15
  output = Netdisco.new.discover @host
16
16
 
17
17
  # 邻居关系发现后修正处理逻辑钩子函数
data/lib/netdisco/dns.rb CHANGED
@@ -45,6 +45,7 @@ class Netdisco
45
45
  rescue StandardError => e
46
46
  Log.debug "DNS resolution/getname for '#{ip}' raised error '#{e.class}' with message '#{e.message}'"
47
47
  @cache_name[ip] = ip
48
+ ip
48
49
  end
49
50
  end
50
51
  end
@@ -18,16 +18,16 @@ class Netdisco
18
18
  def make_peers
19
19
  peers = []
20
20
  @mib.by_oid(PEERS_BY).each do |_, vb|
21
- peer = Peer.new
22
- peer_id = vb.oid_id(PEERS_BY)
23
- peer.oid = get_oid_hash(peer_id)
24
- peer.raw_ip = @mib[OID[:cdpCacheAddress], peer_id].as_ip
21
+ peer = Peer.new
22
+ peer_id = vb.oid_id(PEERS_BY)
23
+ peer.oid = get_oid_hash(peer_id)
24
+ peer.raw_ip = @mib[OID[:cdpCacheAddress], peer_id].as_ip rescue peer.ip
25
25
  peer.raw_name = @mib[OID[:cdpCacheDeviceId], peer_id].value
26
- peer.ip = get_ip(peer.raw_ip, peer.raw_name)
27
- peer.dst = @mib[OID[:cdpCacheDevicePort], peer_id].value
28
- peer.src = @mib[OID[:cdpInterfaceName], peer_id.first]
29
- peer.src = peer.src&.value if peer.src
30
- peer.raw_ip = @mib[OID[:cdpCacheAddress], peer_id].value
26
+ # 修正设备命名
27
+ peer.ip = get_ip(peer.raw_ip, peer.raw_name)
28
+ peer.src = @mib[OID[:cdpInterfaceName], peer_id.first].value rescue nil
29
+ peer.dst = @mib[OID[:cdpCacheDevicePort], peer_id].value rescue nil
30
+ # peer.raw_ip = @mib[OID[:cdpCacheAddress], peer_id].value
31
31
  peers << peer
32
32
  end
33
33
  peers
@@ -26,7 +26,6 @@ class Netdisco
26
26
  # 轮询设备邻居关系
27
27
  def poll
28
28
  @mib = @snmp.hashwalk self.class::MIB
29
- # require "pp"; PP.pp @mib
30
29
  make_peers
31
30
  rescue SNMP::NoResponse
32
31
  []
@@ -4,6 +4,13 @@ class Netdisco
4
4
  module NameMap
5
5
  def name_map(origin_name)
6
6
  name = origin_name.dup
7
+ # 早期异常拦截
8
+ if name.nil?
9
+ Log.debug "Netdisco name_map origin_name is nil"
10
+ return nil
11
+ end
12
+
13
+ # 字典替换
7
14
  CFG.name_map.each do |match, replace|
8
15
  re = Regexp.new match
9
16
  name = name.sub re, replace
data/lib/netdisco/snmp.rb CHANGED
@@ -44,14 +44,16 @@ class Netdisco
44
44
  # 初始化变量
45
45
  last, oid, results = false, root.dup, []
46
46
  # 将点分10进制字串转换为数组对象
47
- root = root.split(".").map { |chr| chr.to_i }
47
+ # root = root.split(".").map { |chr| chr.to_i }
48
+
48
49
  # 遍历 root_oid
49
50
  until last
50
51
  vbs = snmp(:get_bulk, 0, CFG.snmp.bulkrows, oid).varbind_list
51
52
  vbs.each do |vb|
52
- oid = vb.oid
53
+ oid = vb.name.to_str
53
54
  # 解析到的 oid 不匹配 root 跳出循环
54
- (last = true; break) unless oid[0..root.size - 1] == root
55
+ (last = true; break) unless oid.match?(/^#{Regexp.quote(root)}/)
56
+ # (last = true; break) unless oid[0..root.size - 1] == root
55
57
  results << vb
56
58
  end
57
59
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Netdisco
4
- VERSION = "0.0.7"
4
+ VERSION = "0.0.8"
5
5
  end
data/lib/netdisco.rb CHANGED
@@ -60,8 +60,10 @@ class Netdisco
60
60
  @hosts[host] = peers = neighbors(host)
61
61
  # 第二步遍历邻居的邻居关系
62
62
  peers.each do |peer|
63
+ # 自动跳过已发现设备IP
63
64
  next if @hosts.has_key? peer.ip
64
65
  next unless @poll.include? peer.ip
66
+ # 发现邻居关系
65
67
  discover peer.ip
66
68
  end
67
69
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netdisco
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - WENWU.YAN
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-17 00:00:00.000000000 Z
11
+ date: 2022-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: snmp