netdisco 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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