netdisco 0.0.5 → 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: 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