netdisco 0.0.5 → 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: 717c023a9db51e3af00801112bbeaf47ab48159b98db46932bfd03243fcd5965
4
- data.tar.gz: 5c871ee533134fd8e9e6e840c2cb6b598b031b013979247ef529d1565d2cc7ad
3
+ metadata.gz: 16f405c4657e51cf5421806990865bd05c46bc2a887e7ac022897f643449879a
4
+ data.tar.gz: 801394ad4dfcea976618f1f5b3af828037ee15e2aef7c4ccc93d93cacd6e6ccc
5
5
  SHA512:
6
- metadata.gz: 5f2bdf61addfe71f2bdcdeb6b0728ae36fc9453f9edcce7e74c0c158bcf8bdcb4223ca8df25967c9ebfbfaaf65b2aebe7b7ba0f4a55e27bb1e946d95e49670e7
7
- data.tar.gz: bfdabe4b30c8e3e5867b42ab9f6af9efa1748df080ed09cae4c37deef316086e72808a3bffc420152031fa0238dcc23fac133f864b0061e8e6b3cd5b706d63ee
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
  # 邻居关系发现后修正处理逻辑钩子函数
@@ -26,8 +26,8 @@ class Netdisco
26
26
  CONFIG.default.log = "STDERR"
27
27
  CONFIG.default.debug = true
28
28
  CONFIG.default.name_map = [ # regexp match+sub of hostname (needed for LLDP)
29
- ['-re\d+', ""],
30
- ["^KILLME(.*(?<!mojo.local)$)", '\1.mojo.local'], # adds missing domain name
29
+ ['-\d+', ""],
30
+ ["^(.*(?<!mojo.local)$)", '\1.mojo.local'], # adds missing domain name
31
31
  ]
32
32
  # 加载配置并设置对应常量
33
33
  CONFIG.load
data/lib/netdisco/dns.rb CHANGED
@@ -27,7 +27,7 @@ class Netdisco
27
27
  @cache_ip[name] = Resolv.getaddress name
28
28
  end
29
29
  rescue StandardError => e
30
- Log.debug "DNS resolution for '#{name}' raised error '#{e.class}' with message '#{e.message}'"
30
+ Log.debug "DNS resolution/getip for '#{name}' raised error '#{e.class}' with message '#{e.message}'"
31
31
  nil
32
32
  end
33
33
  end
@@ -42,9 +42,10 @@ class Netdisco
42
42
  else
43
43
  begin
44
44
  @cache_name[ip] = Resolv.getname ip
45
- rescue StoreError => e
46
- Log.debug "DNS resolution for '#{ip}' raised error '#{e.class}' with message '#{e.message}'"
45
+ rescue StandardError => e
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.5"
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.5
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
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.3
47
+ version: 0.0.5
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.3
54
+ version: 0.0.5
55
55
  description: Netdisco is working for network snmp discovery
56
56
  email:
57
57
  - careline@foxmail.com