network-utility 1.1.4

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.
Files changed (179) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +2 -0
  3. data/document/acl-M6000-16E.md +27 -0
  4. data/document/acl-M6000-18S.md +27 -0
  5. data/document/acl-M6000-8.md +27 -0
  6. data/document/acl-M6000-8E.md +27 -0
  7. data/document/acl-MA5200G-8.md +204 -0
  8. data/document/acl-ME60-16.md +177 -0
  9. data/document/acl-ME60-X16.md +177 -0
  10. data/document/acl-NE40E-X16.md +204 -0
  11. data/document/acl-NE40E-X16A.md +204 -0
  12. data/document/acl-NE40E-X8.md +204 -0
  13. data/document/acl-NE40E.md +204 -0
  14. data/document/acl-NE5000E-20.md +25 -0
  15. data/document/acl-NE5000E-X16.md +25 -0
  16. data/document/acl-NE5000E-X16A.md +25 -0
  17. data/document/acl-NE80E.md +204 -0
  18. data/document/bgp-CR16010H-F.md +25 -0
  19. data/document/bgp-CR16018-F.md +25 -0
  20. data/document/bgp-CR19000-20.md +25 -0
  21. data/document/bgp-M6000-16E.md +25 -0
  22. data/document/bgp-M6000-18S.md +25 -0
  23. data/document/bgp-M6000-8.md +25 -0
  24. data/document/bgp-M6000-8E.md +25 -0
  25. data/document/bgp-MA5200G-8.md +25 -0
  26. data/document/bgp-ME60-16.md +25 -0
  27. data/document/bgp-ME60-X16.md +25 -0
  28. data/document/bgp-NE40E-X16.md +25 -0
  29. data/document/bgp-NE40E-X16A.md +25 -0
  30. data/document/bgp-NE40E-X8.md +25 -0
  31. data/document/bgp-NE40E.md +25 -0
  32. data/document/bgp-NE5000E-20.md +25 -0
  33. data/document/bgp-NE5000E-X16.md +25 -0
  34. data/document/bgp-NE5000E-X16A.md +25 -0
  35. data/document/bgp-NE80E.md +25 -0
  36. data/document/config.md +1153 -0
  37. data/document/document.rb +27 -0
  38. data/document/if-ALCATEL7750.md +48 -0
  39. data/document/if-C7609.md +47 -0
  40. data/document/if-CR16010H-F.md +300 -0
  41. data/document/if-CR16018-F.md +300 -0
  42. data/document/if-CR19000-20.md +300 -0
  43. data/document/if-CRS-16.md +47 -0
  44. data/document/if-CX600-X16A.md +349 -0
  45. data/document/if-CX600-X8A.md +349 -0
  46. data/document/if-M6000-16E.md +652 -0
  47. data/document/if-M6000-18S.md +846 -0
  48. data/document/if-M6000-8.md +653 -0
  49. data/document/if-M6000-8E.md +653 -0
  50. data/document/if-MA5200G-8.md +357 -0
  51. data/document/if-ME60-16.md +357 -0
  52. data/document/if-ME60-X16.md +357 -0
  53. data/document/if-NE40E-X16.md +357 -0
  54. data/document/if-NE40E-X16A.md +357 -0
  55. data/document/if-NE40E-X8.md +357 -0
  56. data/document/if-NE40E.md +357 -0
  57. data/document/if-NE5000E-20.md +357 -0
  58. data/document/if-NE5000E-X16.md +357 -0
  59. data/document/if-NE5000E-X16A.md +357 -0
  60. data/document/if-NE8000E-X8.md +357 -0
  61. data/document/if-NE80E.md +357 -0
  62. data/document/if-NE8100-X8.md +357 -0
  63. data/document/if-Nokia7750.md +48 -0
  64. data/document/if-T8000-18.md +653 -0
  65. data/document/if-V6000.md +663 -0
  66. data/document/if-VNE9000.md +357 -0
  67. data/document/if-ZXCTN9000-18EA.md +762 -0
  68. data/document/if-ZXCTN9000-8EA.md +762 -0
  69. data/document/lic-M6000-16E.md +28 -0
  70. data/document/lic-M6000-18S.md +28 -0
  71. data/document/lic-M6000-8.md +28 -0
  72. data/document/lic-M6000-8E.md +28 -0
  73. data/document/lic-MA5200G-8.md +27 -0
  74. data/document/lic-ME60-16.md +27 -0
  75. data/document/lic-ME60-X16.md +27 -0
  76. data/document/lic-NE40E-X16.md +27 -0
  77. data/document/lic-NE40E-X16A.md +27 -0
  78. data/document/lic-NE40E-X8.md +27 -0
  79. data/document/log-M6000-16E.md +36 -0
  80. data/document/log-M6000-18S.md +36 -0
  81. data/document/log-M6000-8.md +36 -0
  82. data/document/log-M6000-8E.md +36 -0
  83. data/document/log-MA5200G-8.md +61 -0
  84. data/document/log-ME60-16.md +61 -0
  85. data/document/log-ME60-X16.md +61 -0
  86. data/document/log-NE40E-X16.md +61 -0
  87. data/document/log-NE40E-X16A.md +61 -0
  88. data/document/log-NE40E-X8.md +61 -0
  89. data/document/log-NE40E.md +61 -0
  90. data/document/log-NE5000E-20.md +61 -0
  91. data/document/log-NE5000E-X16.md +61 -0
  92. data/document/log-NE5000E-X16A.md +61 -0
  93. data/document/log-NE80E.md +61 -0
  94. data/document/nat-CR16010H-F.md +27 -0
  95. data/document/nat-CR16018-F.md +27 -0
  96. data/document/nat-M6000-16E.md +27 -0
  97. data/document/nat-M6000-18S.md +27 -0
  98. data/document/nat-M6000-8.md +27 -0
  99. data/document/nat-M6000-8E.md +27 -0
  100. data/document/nat-ME60-16.md +44 -0
  101. data/document/nat-ME60-X16.md +44 -0
  102. data/document/nat-NE40E-X16.md +44 -0
  103. data/document/nat-NE40E-X16A.md +44 -0
  104. data/document/policy-M6000-16E.md +13 -0
  105. data/document/policy-M6000-18S.md +13 -0
  106. data/document/policy-M6000-8.md +13 -0
  107. data/document/policy-M6000-8E.md +13 -0
  108. data/document/policy-MA5200G-8.md +87 -0
  109. data/document/policy-ME60-16.md +87 -0
  110. data/document/policy-ME60-X16.md +87 -0
  111. data/document/policy-NE40E-X16.md +87 -0
  112. data/document/policy-NE40E-X16A.md +87 -0
  113. data/document/policy-NE40E-X8.md +87 -0
  114. data/document/policy-NE40E.md +87 -0
  115. data/document/policy-NE5000E-20.md +87 -0
  116. data/document/policy-NE5000E-X16.md +87 -0
  117. data/document/policy-NE5000E-X16A.md +87 -0
  118. data/document/policy-NE80E.md +87 -0
  119. data/document/pool-M6000-16E.md +126 -0
  120. data/document/pool-M6000-18S.md +126 -0
  121. data/document/pool-M6000-8.md +126 -0
  122. data/document/pool-M6000-8E.md +126 -0
  123. data/document/pool-MA5200G-8.md +138 -0
  124. data/document/pool-ME60-16.md +138 -0
  125. data/document/pool-ME60-X16.md +138 -0
  126. data/document/pool-NE40E-X16.md +138 -0
  127. data/document/pool-NE40E-X16A.md +138 -0
  128. data/document/pool-NE40E-X8.md +138 -0
  129. data/document/pool-NE40E.md +138 -0
  130. data/document/pool-NE80E.md +138 -0
  131. data/document/static-CR16010H-F.md +60 -0
  132. data/document/static-CR16018-F.md +60 -0
  133. data/document/static-CR19000-20.md +60 -0
  134. data/document/static-CX600-X16A.md +26 -0
  135. data/document/static-CX600-X8A.md +26 -0
  136. data/document/static-M6000-16E.md +104 -0
  137. data/document/static-M6000-18S.md +104 -0
  138. data/document/static-M6000-8.md +104 -0
  139. data/document/static-M6000-8E.md +104 -0
  140. data/document/static-MA5200G-8.md +82 -0
  141. data/document/static-ME60-16.md +82 -0
  142. data/document/static-ME60-X16.md +82 -0
  143. data/document/static-NE40E-X16.md +82 -0
  144. data/document/static-NE40E-X16A.md +81 -0
  145. data/document/static-NE40E-X8.md +82 -0
  146. data/document/static-NE40E.md +67 -0
  147. data/document/static-NE5000E-20.md +67 -0
  148. data/document/static-NE5000E-X16.md +67 -0
  149. data/document/static-NE5000E-X16A.md +67 -0
  150. data/document/static-NE8000E-X8.md +26 -0
  151. data/document/static-NE80E.md +67 -0
  152. data/document/static-NE8100-X8.md +26 -0
  153. data/document/static-T8000-18.md +34 -0
  154. data/document/static-ZXCTN9000-18EA.md +34 -0
  155. data/document/static-ZXCTN9000-8EA.md +34 -0
  156. data/document/system-M6000-16E.md +75 -0
  157. data/document/system-M6000-18S.md +76 -0
  158. data/document/system-M6000-8.md +75 -0
  159. data/document/system-M6000-8E.md +75 -0
  160. data/document/system-MA5200G-8.md +51 -0
  161. data/document/system-ME60-16.md +51 -0
  162. data/document/system-ME60-X16.md +51 -0
  163. data/document/system-NE40E-X16.md +51 -0
  164. data/document/system-NE40E-X16A.md +51 -0
  165. data/document/system-NE40E-X8.md +51 -0
  166. data/document/system-NE40E.md +51 -0
  167. data/document/system-NE5000E-20.md +51 -0
  168. data/document/system-NE5000E-X16.md +51 -0
  169. data/document/system-NE5000E-X16A.md +51 -0
  170. data/document/system-NE80E.md +51 -0
  171. data/document/telnet.md +332 -0
  172. data/network.rb +24 -0
  173. data/utility/ipv4_address.rb +266 -0
  174. data/utility/ipv6_address.rb +201 -0
  175. data/utility/mac_address.rb +77 -0
  176. data/utility/netmerge.rb +46 -0
  177. data/utility/route.rb +79 -0
  178. data/utility/whitelist.rb +21 -0
  179. metadata +258 -0
@@ -0,0 +1,126 @@
1
+
2
+ # M6000-18S 地址池
3
+
4
+ ```ruby
5
+ @sign << ['M6000-18S', '地址池接口']
6
+ @sign << ['M6000-18S', '地址池配置']
7
+ @sign << ['M6000-18S', '地址池解析']
8
+ @sign << ['M6000-18S', 'nat地址配置']
9
+ @sign << ['M6000-18S', '地址池日志']
10
+
11
+ module M6000_18S
12
+ module_function
13
+
14
+ def 地址池接口 配置散列
15
+ 虚接口正文,录入 = '',false;虚接口列表,虚接口散列 = [],{}
16
+ (配置散列['AM'] || 配置散列['am']).each_line do|line|
17
+ 录入 = true if / interface vbui(.)*/.match(line)
18
+ 虚接口正文 << line if 录入
19
+ (虚接口列表 << 虚接口正文;虚接口正文,录入 = '',false) if " \$\n"==line # M6k-8 is / \$/.match(line)
20
+ end
21
+ 虚接口列表.delete("")
22
+ 虚接口列表.each{|虚接口|虚接口散列[虚接口.split("\n")[0].split(' ')[1].strip]=虚接口}
23
+ 虚接口散列
24
+ end
25
+
26
+ def 地址池配置 虚接口文本
27
+ 地址池正文,录入 = '',false;地址池列表 = []
28
+ 虚接口文本.each_line do|line|
29
+ 录入 = true if / ip-pool pool-name(.)*/.match(line)
30
+ 地址池正文 << line if 录入
31
+ (地址池列表 << 地址池正文;地址池正文,录入 = '',false) if " \$\n"==line # M6k-8 is / \$/.match(line)
32
+ end
33
+ 地址池列表
34
+ end
35
+
36
+ def 地址池解析 配置散列
37
+ 地址池列表,地址池配置,虚接口散列 = [],[],地址池接口(配置散列)
38
+ 虚接口散列.values.each{|虚接口|地址池配置 += 地址池配置(虚接口)}
39
+ 地址池配置.each do|地址池|参数 = {};index = 1
40
+ 地址池.each_line do|line|
41
+ if line.include?('ip-pool')
42
+ 参数['name'] = line.chop.strip.split(' ')[-3]
43
+ 参数['id'] = line.chop.strip.split(' ')[-1]
44
+ end
45
+ if line.include?('access-domain')
46
+ 参数['access-domain'] ||= []
47
+ 参数['access-domain'] << line.chop.strip.split(' ')[-1]
48
+ end
49
+ if line.include?('pppoe-dns-server') || line.include?('ipoe-dns-server')
50
+ 参数['dns-server'] ||= []
51
+ 参数['dns-server'] << line.chop.gsub('second','').strip.split(' ')[-1]
52
+ 参数['dns-server'].uniq!
53
+ end
54
+ if line.include?('member')
55
+ index = line.split(' ').last.strip
56
+ end
57
+ if line.include?('start-ip') and line.include?('end-ip')
58
+ 参数['member'] ||= []
59
+ 开始ip = line.chop.strip.split(' ')[-3]
60
+ 结束ip = line.chop.strip.split(' ')[-1]
61
+ 参数['member'] << [index,开始ip,结束ip]
62
+ end
63
+ end
64
+ 地址池列表 << 参数
65
+ end
66
+ 地址池列表
67
+ end
68
+
69
+ def nat地址配置 配置散列
70
+ 地址池列表 = [];参数 = {}
71
+ (配置散列['CGN'] || 配置散列['cgn'] || "").each_line do|line|
72
+ if line.include?("node")
73
+ 参数['node'] ||= []
74
+ a,node_id,board = line.split(" ")
75
+ 参数['node'] << [node_id,board]
76
+ end
77
+ 参数['tcp-mss-clamping'] = line.split(" ")[-1].strip if line.include?("tcp-mss-clamping")
78
+ if line.include?("cgn-pool")
79
+ 参数['pool'] ||= {}
80
+ 参数['pool']['name'] = line.split(" ")[1]
81
+ 参数['pool']['id'] = line.split(" ")[3]
82
+ end
83
+ 参数['pool']['port-range'] = line.split(" ")[-1] if line.include?("port-range")
84
+ if line.include?("section")
85
+ 参数['pool']['section'] ||= []
86
+ a,section,stip,edip = line.split(" ")
87
+ 参数['pool']['section'] << [section,stip,edip]
88
+ end
89
+ if line.include?("domain")
90
+ 参数['domain name'] = line.split(" ")[1]
91
+ 参数['domain id'] = line.split(" ")[2]
92
+ 参数['domain type'] = line.split(" ")[4..5].join(" ")
93
+ end
94
+ 参数['tcp-timeout-unwell-known-fin-rst'] = line.split(" ")[-1] if line.include?("unwell-known-port")
95
+ 参数['tcp-timeout-well-known-fin-rst'] = line.split(" ")[-1] if line.include?("well-known-port")
96
+ if line.include?("dynamic")
97
+ 参数['acl rule'] ||= []
98
+ 参数['acl rule'] << line.strip
99
+ end
100
+ end
101
+ 地址池列表 << 参数
102
+ 地址池列表
103
+ end
104
+
105
+ def 地址池日志 详细信息
106
+ 地址池列表 = [];时间标签 = Time.now.form
107
+ 分片信息 = 详细信息.split("----------------------------------------\n")[1..-1]
108
+ 分片信息.each do|片段|单池 = {"Scan Time"=>时间标签}
109
+ 单池['Pool Id'] = /pool\-id( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
110
+ 单池['Pool Name'] = /pool\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
111
+ 单池['Description'] = /description( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
112
+ 单池['Domain Name'] = /domain\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
113
+ 其他域名 = 片段.split("\n").select{|line|line.split(" ").size==1 and !line.include?("#") and !line.include?("^")}
114
+ 单池['Domain Name'] = ( [单池['Domain Name']] + 其他域名.select{|l|!l.include?("[TelnetMajin]")}.map{|line|line.strip} ).join(";")
115
+ 单池['Vpn Id'] = /vpn\-id( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
116
+ 单池['Vbui Name'] = /vbui\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
117
+ 单池['Address Total'] = /address\-total( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
118
+ 单池['Unusable Rate'] = /unusable\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
119
+ 单池['Used Rate'] = /used\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
120
+ 单池['Free Rate'] = /free\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
121
+ 地址池列表 << 单池
122
+ end
123
+ 地址池列表
124
+ end
125
+ end
126
+ ```
@@ -0,0 +1,126 @@
1
+
2
+ # M6000-8 地址池
3
+
4
+ ```ruby
5
+ @sign << ['M6000-8', '地址池接口']
6
+ @sign << ['M6000-8', '地址池配置']
7
+ @sign << ['M6000-8', '地址池解析']
8
+ @sign << ['M6000-8', 'nat地址配置']
9
+ @sign << ['M6000-8', '地址池日志']
10
+
11
+ module M6000_8
12
+ module_function
13
+
14
+ def 地址池接口 配置散列
15
+ 虚接口正文,录入 = '',false;虚接口列表,虚接口散列 = [],{}
16
+ (配置散列['AM'] || 配置散列['am']).each_line do|line|
17
+ 录入 = true if / interface vbui(.)*/.match(line)
18
+ 虚接口正文 << line if 录入
19
+ (虚接口列表 << 虚接口正文;虚接口正文,录入 = '',false) if " \$\n"==line # M6k-8 is / \$/.match(line)
20
+ end
21
+ 虚接口列表.delete("")
22
+ 虚接口列表.each{|虚接口|虚接口散列[虚接口.split("\n")[0].split(' ')[1].strip]=虚接口}
23
+ 虚接口散列
24
+ end
25
+
26
+ def 地址池配置 虚接口文本
27
+ 地址池正文,录入 = '',false;地址池列表 = []
28
+ 虚接口文本.each_line do|line|
29
+ 录入 = true if / ip-pool pool-name(.)*/.match(line)
30
+ 地址池正文 << line if 录入
31
+ (地址池列表 << 地址池正文;地址池正文,录入 = '',false) if " \$\n"==line # M6k-8 is / \$/.match(line)
32
+ end
33
+ 地址池列表
34
+ end
35
+
36
+ def 地址池解析 配置散列
37
+ 地址池列表,地址池配置,虚接口散列 = [],[],地址池接口(配置散列)
38
+ 虚接口散列.values.each{|虚接口|地址池配置 += 地址池配置(虚接口)}
39
+ 地址池配置.each do|地址池|参数 = {};index = 1
40
+ 地址池.each_line do|line|
41
+ if line.include?('ip-pool')
42
+ 参数['name'] = line.chop.strip.split(' ')[-3]
43
+ 参数['id'] = line.chop.strip.split(' ')[-1]
44
+ end
45
+ if line.include?('access-domain')
46
+ 参数['access-domain'] ||= []
47
+ 参数['access-domain'] << line.chop.strip.split(' ')[-1]
48
+ end
49
+ if line.include?('pppoe-dns-server') || line.include?('ipoe-dns-server')
50
+ 参数['dns-server'] ||= []
51
+ 参数['dns-server'] << line.chop.gsub('second','').strip.split(' ')[-1]
52
+ 参数['dns-server'].uniq!
53
+ end
54
+ if line.include?('member')
55
+ index = line.split(' ').last.strip
56
+ end
57
+ if line.include?('start-ip') and line.include?('end-ip')
58
+ 参数['member'] ||= []
59
+ 开始ip = line.chop.strip.split(' ')[-3]
60
+ 结束ip = line.chop.strip.split(' ')[-1]
61
+ 参数['member'] << [index,开始ip,结束ip]
62
+ end
63
+ end
64
+ 地址池列表 << 参数
65
+ end
66
+ 地址池列表
67
+ end
68
+
69
+ def nat地址配置 配置散列
70
+ 地址池列表 = [];参数 = {}
71
+ (配置散列['CGN'] || 配置散列['cgn'] || "").each_line do|line|
72
+ if line.include?("node")
73
+ 参数['node'] ||= []
74
+ a,node_id,board = line.split(" ")
75
+ 参数['node'] << [node_id,board]
76
+ end
77
+ 参数['tcp-mss-clamping'] = line.split(" ")[-1].strip if line.include?("tcp-mss-clamping")
78
+ if line.include?("cgn-pool")
79
+ 参数['pool'] ||= {}
80
+ 参数['pool']['name'] = line.split(" ")[1]
81
+ 参数['pool']['id'] = line.split(" ")[3]
82
+ end
83
+ 参数['pool']['port-range'] = line.split(" ")[-1] if line.include?("port-range")
84
+ if line.include?("section")
85
+ 参数['pool']['section'] ||= []
86
+ a,section,stip,edip = line.split(" ")
87
+ 参数['pool']['section'] << [section,stip,edip]
88
+ end
89
+ if line.include?("domain")
90
+ 参数['domain name'] = line.split(" ")[1]
91
+ 参数['domain id'] = line.split(" ")[2]
92
+ 参数['domain type'] = line.split(" ")[4..5].join(" ")
93
+ end
94
+ 参数['tcp-timeout-unwell-known-fin-rst'] = line.split(" ")[-1] if line.include?("unwell-known-port")
95
+ 参数['tcp-timeout-well-known-fin-rst'] = line.split(" ")[-1] if line.include?("well-known-port")
96
+ if line.include?("dynamic")
97
+ 参数['acl rule'] ||= []
98
+ 参数['acl rule'] << line.strip
99
+ end
100
+ end
101
+ 地址池列表 << 参数
102
+ 地址池列表
103
+ end
104
+
105
+ def 地址池日志 详细信息
106
+ 地址池列表 = [];时间标签 = Time.now.form
107
+ 分片信息 = 详细信息.split("----------------------------------------\n")[1..-1]
108
+ 分片信息.each do|片段|单池 = {"Scan Time"=>时间标签}
109
+ 单池['Pool Id'] = /pool\-id( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
110
+ 单池['Pool Name'] = /pool\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
111
+ 单池['Description'] = /description( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
112
+ 单池['Domain Name'] = /domain\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
113
+ 其他域名 = 片段.split("\n").select{|line|line.split(" ").size==1 and !line.include?("#") and !line.include?("^")}
114
+ 单池['Domain Name'] = ( [单池['Domain Name']] + 其他域名.select{|l|!l.include?("[TelnetMajin]")}.map{|line|line.strip} ).join(";")
115
+ 单池['Vpn Id'] = /vpn\-id( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
116
+ 单池['Vbui Name'] = /vbui\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
117
+ 单池['Address Total'] = /address\-total( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
118
+ 单池['Unusable Rate'] = /unusable\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
119
+ 单池['Used Rate'] = /used\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
120
+ 单池['Free Rate'] = /free\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
121
+ 地址池列表 << 单池
122
+ end
123
+ 地址池列表
124
+ end
125
+ end
126
+ ```
@@ -0,0 +1,126 @@
1
+
2
+ # M6000-8E 地址池
3
+
4
+ ```ruby
5
+ @sign << ['M6000-8E', '地址池接口']
6
+ @sign << ['M6000-8E', '地址池配置']
7
+ @sign << ['M6000-8E', '地址池解析']
8
+ @sign << ['M6000-8E', 'nat地址配置']
9
+ @sign << ['M6000-8E', '地址池日志']
10
+
11
+ module M6000_8E
12
+ module_function
13
+
14
+ def 地址池接口 配置散列
15
+ 虚接口正文,录入 = '',false;虚接口列表,虚接口散列 = [],{}
16
+ (配置散列['AM'] || 配置散列['am']).each_line do|line|
17
+ 录入 = true if / interface vbui(.)*/.match(line)
18
+ 虚接口正文 << line if 录入
19
+ (虚接口列表 << 虚接口正文;虚接口正文,录入 = '',false) if " \$\n"==line # M6k-8 is / \$/.match(line)
20
+ end
21
+ 虚接口列表.delete("")
22
+ 虚接口列表.each{|虚接口|虚接口散列[虚接口.split("\n")[0].split(' ')[1].strip]=虚接口}
23
+ 虚接口散列
24
+ end
25
+
26
+ def 地址池配置 虚接口文本
27
+ 地址池正文,录入 = '',false;地址池列表 = []
28
+ 虚接口文本.each_line do|line|
29
+ 录入 = true if / ip-pool pool-name(.)*/.match(line)
30
+ 地址池正文 << line if 录入
31
+ (地址池列表 << 地址池正文;地址池正文,录入 = '',false) if " \$\n"==line # M6k-8 is / \$/.match(line)
32
+ end
33
+ 地址池列表
34
+ end
35
+
36
+ def 地址池解析 配置散列
37
+ 地址池列表,地址池配置,虚接口散列 = [],[],地址池接口(配置散列)
38
+ 虚接口散列.values.each{|虚接口|地址池配置 += 地址池配置(虚接口)}
39
+ 地址池配置.each do|地址池|参数 = {};index = 1
40
+ 地址池.each_line do|line|
41
+ if line.include?('ip-pool')
42
+ 参数['name'] = line.chop.strip.split(' ')[-3]
43
+ 参数['id'] = line.chop.strip.split(' ')[-1]
44
+ end
45
+ if line.include?('access-domain')
46
+ 参数['access-domain'] ||= []
47
+ 参数['access-domain'] << line.chop.strip.split(' ')[-1]
48
+ end
49
+ if line.include?('pppoe-dns-server') || line.include?('ipoe-dns-server')
50
+ 参数['dns-server'] ||= []
51
+ 参数['dns-server'] << line.chop.gsub('second','').strip.split(' ')[-1]
52
+ 参数['dns-server'].uniq!
53
+ end
54
+ if line.include?('member')
55
+ index = line.split(' ').last.strip
56
+ end
57
+ if line.include?('start-ip') and line.include?('end-ip')
58
+ 参数['member'] ||= []
59
+ 开始ip = line.chop.strip.split(' ')[-3]
60
+ 结束ip = line.chop.strip.split(' ')[-1]
61
+ 参数['member'] << [index,开始ip,结束ip]
62
+ end
63
+ end
64
+ 地址池列表 << 参数
65
+ end
66
+ 地址池列表
67
+ end
68
+
69
+ def nat地址配置 配置散列
70
+ 地址池列表 = [];参数 = {}
71
+ (配置散列['CGN'] || 配置散列['cgn'] || "").each_line do|line|
72
+ if line.include?("node")
73
+ 参数['node'] ||= []
74
+ a,node_id,board = line.split(" ")
75
+ 参数['node'] << [node_id,board]
76
+ end
77
+ 参数['tcp-mss-clamping'] = line.split(" ")[-1].strip if line.include?("tcp-mss-clamping")
78
+ if line.include?("cgn-pool")
79
+ 参数['pool'] ||= {}
80
+ 参数['pool']['name'] = line.split(" ")[1]
81
+ 参数['pool']['id'] = line.split(" ")[3]
82
+ end
83
+ 参数['pool']['port-range'] = line.split(" ")[-1] if line.include?("port-range")
84
+ if line.include?("section")
85
+ 参数['pool']['section'] ||= []
86
+ a,section,stip,edip = line.split(" ")
87
+ 参数['pool']['section'] << [section,stip,edip]
88
+ end
89
+ if line.include?("domain")
90
+ 参数['domain name'] = line.split(" ")[1]
91
+ 参数['domain id'] = line.split(" ")[2]
92
+ 参数['domain type'] = line.split(" ")[4..5].join(" ")
93
+ end
94
+ 参数['tcp-timeout-unwell-known-fin-rst'] = line.split(" ")[-1] if line.include?("unwell-known-port")
95
+ 参数['tcp-timeout-well-known-fin-rst'] = line.split(" ")[-1] if line.include?("well-known-port")
96
+ if line.include?("dynamic")
97
+ 参数['acl rule'] ||= []
98
+ 参数['acl rule'] << line.strip
99
+ end
100
+ end
101
+ 地址池列表 << 参数
102
+ 地址池列表
103
+ end
104
+
105
+ def 地址池日志 详细信息
106
+ 地址池列表 = [];时间标签 = Time.now.form
107
+ 分片信息 = 详细信息.split("----------------------------------------\n")[1..-1]
108
+ 分片信息.each do|片段|单池 = {"Scan Time"=>时间标签}
109
+ 单池['Pool Id'] = /pool\-id( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
110
+ 单池['Pool Name'] = /pool\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
111
+ 单池['Description'] = /description( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
112
+ 单池['Domain Name'] = /domain\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
113
+ 其他域名 = 片段.split("\n").select{|line|line.split(" ").size==1 and !line.include?("#") and !line.include?("^")}
114
+ 单池['Domain Name'] = ( [单池['Domain Name']] + 其他域名.select{|l|!l.include?("[TelnetMajin]")}.map{|line|line.strip} ).join(";")
115
+ 单池['Vpn Id'] = /vpn\-id( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
116
+ 单池['Vbui Name'] = /vbui\-name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
117
+ 单池['Address Total'] = /address\-total( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
118
+ 单池['Unusable Rate'] = /unusable\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
119
+ 单池['Used Rate'] = /used\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
120
+ 单池['Free Rate'] = /free\-rate( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip#.split(" ")[0]
121
+ 地址池列表 << 单池
122
+ end
123
+ 地址池列表
124
+ end
125
+ end
126
+ ```
@@ -0,0 +1,138 @@
1
+
2
+ # MA5200G-8 地址池
3
+
4
+ ```ruby
5
+ @sign << ['MA5200G-8', '地址池解析']
6
+ @sign << ['MA5200G-8', 'nat地址配置']
7
+ @sign << ['MA5200G-8', 'sub_range']
8
+ @sign << ['MA5200G-8', '地址池日志']
9
+
10
+ module MA5200G_8
11
+ module_function
12
+
13
+ def 地址池解析 配置散列
14
+ 地址池列表 = []
15
+ 地址池配置 = 配置散列['ip'].select{|配置|配置.include?('ip pool')}
16
+ 地址池配置.each do|地址池|参数 = {}
17
+ 地址池.each_line do|line|
18
+ if line.include?('ip pool') and (args = line.split('ip pool ')[-1].split(' '))
19
+ 参数['name'] = args[0]
20
+ 参数['mode'] = args[1..-1].join(' ')
21
+ end
22
+ if line.include?('gateway') and (args = line.split('gateway ')[-1].split(' '))
23
+ 参数['gateway'] = args[0]
24
+ 参数['gatemsk'] = args[1]
25
+ end
26
+ if line.include?('section') and (args = line.split('section ')[-1].split(' '))
27
+ 参数['section'] ||= []
28
+ 参数['section'] << [args[1],args[2]] # 0:index 1:start 2:end
29
+ end
30
+ if line.include?('vpn-instance') and (args = line.split('vpn-instance ')[-1].split(' '))
31
+ 参数['vpn-instance'] = args.first
32
+ end
33
+ if line.include?('dns-server') and (args = line.split('dns-server ')[-1].split(' '))
34
+ 参数['dns-server'] = args
35
+ end
36
+ end
37
+ 地址池列表 << 参数
38
+ end
39
+ 地址池列表
40
+ end
41
+
42
+ def nat地址配置 配置散列
43
+ 地址池列表 = [];参数 = {}
44
+ return 地址池列表 unless 配置散列['nat']
45
+ 地址池配置 = 配置散列['nat'].select{|配置|配置.include?('nat instance ')}
46
+ 地址池配置.each do|片段|
47
+ 片段.each_line do|line|
48
+ if line.include?("nat instance")
49
+ 地址池列表 << 参数 if 参数!={}
50
+ 参数 = {}
51
+ 参数['instance name'] = line.split("instance ")[1].split(" ")[0].strip
52
+ 参数['instance id'] = line.split("instance ")[1].split("id ")[1].strip
53
+ end
54
+ 参数['port-range'] = line.split("port-range")[1].strip if line.include?("port-range")
55
+ 参数['instance group'] = line.split("service-instance-group")[1].strip if line.include?("service-instance-group")
56
+ if line.include?("nat address-group")
57
+ 参数['address group'] ||= {}
58
+ 参数['address group']['name'] = line.split("nat address-group ")[1].split(" ")[0].strip
59
+ 参数['address group']['id'] = line.split("nat address-group ")[1].split("id ")[1].strip
60
+ end
61
+ if line.include?("section")
62
+ next if line.include?('lock')
63
+ 参数['address group']['pool'] ||= []
64
+ if line.include?('mask') # section NUM NETWORK mask NETMASK
65
+ a,section,net,b,masknum = line.split(" ")
66
+ pool,mask = IP.v4("#{net}/#{masknum}")
67
+ 参数['address group']['pool'] << [section,pool.to_d,mask.to_d]
68
+ elsif line.include?('exclude-ip-address') # section NUM exclude-ip-address START FINISH
69
+ a, session, exclude, exstart, exfinish = line.split(' ')
70
+ except_session = 参数['address group']['pool'].find{|s|s[0]==session}
71
+ next unless except_session
72
+ start, finish = except_session[1], except_session[2]
73
+ if IP.v4(finish).is_mask?
74
+ rstart, rfinish = IP.v4(start).range_with(IP.v4(finish))
75
+ new_ranges = sub_range([rstart.number-1, rfinish.number], [IP.v4(exstart).number,IP.v4(exfinish).number])
76
+ else
77
+ new_ranges = sub_range([IP.v4(start).number, IP.v4(finish).number], [IP.v4(exstart).number,IP.v4(exfinish).number])
78
+ end
79
+ new_ranges.each do|new_range|
80
+ # if empty, only delete old_range
81
+ 参数['address group']['pool'] << [session, (IP.v4('0.0.0.0')+new_range[0]).to_d, (IP.v4('0.0.0.0')+new_range[1]).to_d]
82
+ end
83
+ 参数['address group']['pool'].delete(except_session)
84
+ else # section NUM START FINISH
85
+ a, session, start, finish = line.split(' ')
86
+ 参数['address group']['pool'] << [section,start,finish ]
87
+ end
88
+ end
89
+ 参数['address group']['outbound'] = line.split("outbound")[1].split(" ")[0] if line.include?("nat outbound")
90
+ end
91
+
92
+ 地址池列表 << 参数
93
+ end
94
+ 地址池列表
95
+ end
96
+
97
+ # 从一段地址范围中排除另一段地址范围 :=> 空,一段,两段地址范围
98
+ def sub_range old_range, exclude_range
99
+ a_start, a_end = old_range
100
+ b_start, b_end = exclude_range
101
+ result = []
102
+ if a_start < b_start
103
+ result << [a_start, [a_end, b_start - 1].min]
104
+ end
105
+ if a_end > b_end
106
+ result << [[b_end + 1, a_start].max, a_end]
107
+ end
108
+ result
109
+ end
110
+
111
+ def 地址池日志 详细信息
112
+ 地址池列表 = [];时间标签 = Time.now.form
113
+ 分片信息 = 详细信息.split("IP address pool Statistic")[0].to_s.split("-----------------------------------------------------------------------\n")[1..-1]
114
+ 分片信息.each do|片段|单池 = {"Scan Time"=>时间标签}
115
+ 单池['Pool Name'] = /Pool\-Name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
116
+ 单池['Pool No'] = /Pool\-No( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
117
+ 单池['Pool Constant Index'] = /Pool\-constant\-index( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
118
+ 单池['Position'] = /Position( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
119
+ 单池['Status'] = /Status( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
120
+ 单池['RUI Flag'] = /RUI\-Flag( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
121
+ 单池['Gateway'] = /Gateway( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
122
+ 单池['Mask'] = /Mask( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
123
+ 单池['Vpn Instance'] = /Vpn instance( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
124
+ 单池['Unnumbered Gateway'] = /Unnumbered gateway( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
125
+ 单池['Total'] = /Total( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
126
+ 单池['Used'] = /Used( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
127
+ 单池['Free'] = /Free( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
128
+ 单池['Conflicted'] = /Conflicted( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
129
+ 单池['Disable'] = /Disable( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
130
+ 单池['Designated'] = /Designated( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
131
+ # NoNeed #单池['Gateway'] = /Gateway :(.+)/.match(片段).to_s.split(":")[1].to_s.strip
132
+ 单池['Ratio'] = /Ratio( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
133
+ 地址池列表 << 单池
134
+ end
135
+ 地址池列表
136
+ end
137
+ end
138
+ ```
@@ -0,0 +1,138 @@
1
+
2
+ # ME60-16 地址池
3
+
4
+ ```ruby
5
+ @sign << ['ME60-16', '地址池解析']
6
+ @sign << ['ME60-16', 'nat地址配置']
7
+ @sign << ['ME60-16', 'sub_range']
8
+ @sign << ['ME60-16', '地址池日志']
9
+
10
+ module ME60_16
11
+ module_function
12
+
13
+ def 地址池解析 配置散列
14
+ 地址池列表 = []
15
+ 地址池配置 = 配置散列['ip'].select{|配置|配置.include?('ip pool')}
16
+ 地址池配置.each do|地址池|参数 = {}
17
+ 地址池.each_line do|line|
18
+ if line.include?('ip pool') and (args = line.split('ip pool ')[-1].split(' '))
19
+ 参数['name'] = args[0]
20
+ 参数['mode'] = args[1..-1].join(' ')
21
+ end
22
+ if line.include?('gateway') and (args = line.split('gateway ')[-1].split(' '))
23
+ 参数['gateway'] = args[0]
24
+ 参数['gatemsk'] = args[1]
25
+ end
26
+ if line.include?('section') and (args = line.split('section ')[-1].split(' '))
27
+ 参数['section'] ||= []
28
+ 参数['section'] << [args[1],args[2]] # 0:index 1:start 2:end
29
+ end
30
+ if line.include?('vpn-instance') and (args = line.split('vpn-instance ')[-1].split(' '))
31
+ 参数['vpn-instance'] = args.first
32
+ end
33
+ if line.include?('dns-server') and (args = line.split('dns-server ')[-1].split(' '))
34
+ 参数['dns-server'] = args
35
+ end
36
+ end
37
+ 地址池列表 << 参数
38
+ end
39
+ 地址池列表
40
+ end
41
+
42
+ def nat地址配置 配置散列
43
+ 地址池列表 = [];参数 = {}
44
+ return 地址池列表 unless 配置散列['nat']
45
+ 地址池配置 = 配置散列['nat'].select{|配置|配置.include?('nat instance ')}
46
+ 地址池配置.each do|片段|
47
+ 片段.each_line do|line|
48
+ if line.include?("nat instance")
49
+ 地址池列表 << 参数 if 参数!={}
50
+ 参数 = {}
51
+ 参数['instance name'] = line.split("instance ")[1].split(" ")[0].strip
52
+ 参数['instance id'] = line.split("instance ")[1].split("id ")[1].strip
53
+ end
54
+ 参数['port-range'] = line.split("port-range")[1].strip if line.include?("port-range")
55
+ 参数['instance group'] = line.split("service-instance-group")[1].strip if line.include?("service-instance-group")
56
+ if line.include?("nat address-group")
57
+ 参数['address group'] ||= {}
58
+ 参数['address group']['name'] = line.split("nat address-group ")[1].split(" ")[0].strip
59
+ 参数['address group']['id'] = line.split("nat address-group ")[1].split("id ")[1].strip
60
+ end
61
+ if line.include?("section")
62
+ next if line.include?('lock')
63
+ 参数['address group']['pool'] ||= []
64
+ if line.include?('mask') # section NUM NETWORK mask NETMASK
65
+ a,section,net,b,masknum = line.split(" ")
66
+ pool,mask = IP.v4("#{net}/#{masknum}")
67
+ 参数['address group']['pool'] << [section,pool.to_d,mask.to_d]
68
+ elsif line.include?('exclude-ip-address') # section NUM exclude-ip-address START FINISH
69
+ a, session, exclude, exstart, exfinish = line.split(' ')
70
+ except_session = 参数['address group']['pool'].find{|s|s[0]==session}
71
+ next unless except_session
72
+ start, finish = except_session[1], except_session[2]
73
+ if IP.v4(finish).is_mask?
74
+ rstart, rfinish = IP.v4(start).range_with(IP.v4(finish))
75
+ new_ranges = sub_range([rstart.number-1, rfinish.number], [IP.v4(exstart).number,IP.v4(exfinish).number])
76
+ else
77
+ new_ranges = sub_range([IP.v4(start).number, IP.v4(finish).number], [IP.v4(exstart).number,IP.v4(exfinish).number])
78
+ end
79
+ new_ranges.each do|new_range|
80
+ # if empty, only delete old_range
81
+ 参数['address group']['pool'] << [session, (IP.v4('0.0.0.0')+new_range[0]).to_d, (IP.v4('0.0.0.0')+new_range[1]).to_d]
82
+ end
83
+ 参数['address group']['pool'].delete(except_session)
84
+ else # section NUM START FINISH
85
+ a, session, start, finish = line.split(' ')
86
+ 参数['address group']['pool'] << [section,start,finish ]
87
+ end
88
+ end
89
+ 参数['address group']['outbound'] = line.split("outbound")[1].split(" ")[0] if line.include?("nat outbound")
90
+ end
91
+
92
+ 地址池列表 << 参数
93
+ end
94
+ 地址池列表
95
+ end
96
+
97
+ # 从一段地址范围中排除另一段地址范围 :=> 空,一段,两段地址范围
98
+ def sub_range old_range, exclude_range
99
+ a_start, a_end = old_range
100
+ b_start, b_end = exclude_range
101
+ result = []
102
+ if a_start < b_start
103
+ result << [a_start, [a_end, b_start - 1].min]
104
+ end
105
+ if a_end > b_end
106
+ result << [[b_end + 1, a_start].max, a_end]
107
+ end
108
+ result
109
+ end
110
+
111
+ def 地址池日志 详细信息
112
+ 地址池列表 = [];时间标签 = Time.now.form
113
+ 分片信息 = 详细信息.split("IP address pool Statistic")[0].to_s.split("-----------------------------------------------------------------------\n")[1..-1]
114
+ 分片信息.each do|片段|单池 = {"Scan Time"=>时间标签}
115
+ 单池['Pool Name'] = /Pool\-Name( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
116
+ 单池['Pool No'] = /Pool\-No( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
117
+ 单池['Pool Constant Index'] = /Pool\-constant\-index( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
118
+ 单池['Position'] = /Position( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
119
+ 单池['Status'] = /Status( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
120
+ 单池['RUI Flag'] = /RUI\-Flag( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
121
+ 单池['Gateway'] = /Gateway( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
122
+ 单池['Mask'] = /Mask( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
123
+ 单池['Vpn Instance'] = /Vpn instance( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
124
+ 单池['Unnumbered Gateway'] = /Unnumbered gateway( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
125
+ 单池['Total'] = /Total( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
126
+ 单池['Used'] = /Used( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
127
+ 单池['Free'] = /Free( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
128
+ 单池['Conflicted'] = /Conflicted( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
129
+ 单池['Disable'] = /Disable( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
130
+ 单池['Designated'] = /Designated( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip.split(" ")[0]
131
+ # NoNeed #单池['Gateway'] = /Gateway :(.+)/.match(片段).to_s.split(":")[1].to_s.strip
132
+ 单池['Ratio'] = /Ratio( )*:(.+)/.match(片段).to_s.split(":")[1].to_s.strip
133
+ 地址池列表 << 单池
134
+ end
135
+ 地址池列表
136
+ end
137
+ end
138
+ ```