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,138 @@
1
+
2
+ # NE40E 地址池
3
+
4
+ ```ruby
5
+ @sign << ['NE40E', '地址池解析']
6
+ @sign << ['NE40E', 'nat地址配置']
7
+ @sign << ['NE40E', 'sub_range']
8
+ @sign << ['NE40E', '地址池日志']
9
+
10
+ module NE40E
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
+ # NE80E 地址池
3
+
4
+ ```ruby
5
+ @sign << ['NE80E', '地址池解析']
6
+ @sign << ['NE80E', 'nat地址配置']
7
+ @sign << ['NE80E', 'sub_range']
8
+ @sign << ['NE80E', '地址池日志']
9
+
10
+ module NE80E
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,60 @@
1
+
2
+ # CR16010H-F 静态信息
3
+
4
+ ```ruby
5
+ @sign << ['CR16010H-F', '静态路由']
6
+
7
+ module CR16010H_F
8
+ module_function
9
+
10
+ def 静态路由 配置散列
11
+ static_routes = []
12
+ ['ip','ipv6'].each do|tag|
13
+ (配置散列[tag] || []).each do|part|
14
+ if part.include?('route-static ')
15
+ part.split("\n").each do|line|
16
+ items = line.split(" ")
17
+ record = items[2].include?('vpn-') ? ["static:#{items[3]}"]+items[4..-1] : ["static"]+items[2..-1]
18
+ static_routes << record
19
+ end
20
+ end
21
+ end
22
+ end
23
+ return static_routes
24
+ end
25
+ end
26
+ ```
27
+
28
+ ```ruby
29
+ @sign << ['CR16010H-F', '静态用户地址']
30
+ @sign << ['CR16010H-F', '静态接口地址', 'PENDING']
31
+ @sign << ['CR16010H-F', '静态域地址', 'PENDING']
32
+
33
+ module CR16010H_F
34
+ module_function
35
+
36
+ def 静态用户地址 conf
37
+ tab = []
38
+ (conf['ip'] || []).each do|part|
39
+ part.split("\n").each do|line|
40
+ next unless line.include? 'subscriber session static ip'
41
+ words = line.split(' ')
42
+ tab << words
43
+ end
44
+ end
45
+ tab
46
+ end
47
+
48
+ def 静态接口地址 raw,*guards
49
+ tab = []
50
+ # PENDING
51
+ return tab
52
+ end
53
+
54
+ def 静态域地址 raw,*guards
55
+ tab = []
56
+ # PENDING
57
+ return tab
58
+ end
59
+ end
60
+ ```
@@ -0,0 +1,60 @@
1
+
2
+ # CR16018-F 静态信息
3
+
4
+ ```ruby
5
+ @sign << ['CR16018-F', '静态路由']
6
+
7
+ module CR16018_F
8
+ module_function
9
+
10
+ def 静态路由 配置散列
11
+ static_routes = []
12
+ ['ip','ipv6'].each do|tag|
13
+ (配置散列[tag] || []).each do|part|
14
+ if part.include?('route-static ')
15
+ part.split("\n").each do|line|
16
+ items = line.split(" ")
17
+ record = items[2].include?('vpn-') ? ["static:#{items[3]}"]+items[4..-1] : ["static"]+items[2..-1]
18
+ static_routes << record
19
+ end
20
+ end
21
+ end
22
+ end
23
+ return static_routes
24
+ end
25
+ end
26
+ ```
27
+
28
+ ```ruby
29
+ @sign << ['CR16018-F', '静态用户地址']
30
+ @sign << ['CR16018-F', '静态接口地址', 'PENDING']
31
+ @sign << ['CR16018-F', '静态域地址', 'PENDING']
32
+
33
+ module CR16018_F
34
+ module_function
35
+
36
+ def 静态用户地址 conf
37
+ tab = []
38
+ (conf['ip'] || []).each do|part|
39
+ part.split("\n").each do|line|
40
+ next unless line.include? 'subscriber session static ip'
41
+ words = line.split(' ')
42
+ tab << words
43
+ end
44
+ end
45
+ tab
46
+ end
47
+
48
+ def 静态接口地址 raw,*guards
49
+ tab = []
50
+ # PENDING
51
+ return tab
52
+ end
53
+
54
+ def 静态域地址 raw,*guards
55
+ tab = []
56
+ # PENDING
57
+ return tab
58
+ end
59
+ end
60
+ ```
@@ -0,0 +1,60 @@
1
+
2
+ # CR19000-20 静态路由
3
+
4
+ ```ruby
5
+ @sign << ['CR19000-20', '静态路由']
6
+
7
+ module CR19000_20
8
+ module_function
9
+
10
+ def 静态路由 配置散列
11
+ static_routes = []
12
+ ['ip','ipv6'].each do|tag|
13
+ (配置散列[tag] || []).each do|part|
14
+ if part.include?('route-static ')
15
+ part.split("\n").each do|line|
16
+ items = line.split(" ")
17
+ record = items[2].include?('vpn-') ? ["static:#{items[3]}"]+items[4..-1] : ["static"]+items[2..-1]
18
+ static_routes << record
19
+ end
20
+ end
21
+ end
22
+ end
23
+ return static_routes
24
+ end
25
+ end
26
+ ```
27
+
28
+ ```ruby
29
+ @sign << ['CR19000-20', '静态用户地址']
30
+ @sign << ['CR19000-20', '静态接口地址', 'PENDING']
31
+ @sign << ['CR19000-20', '静态域地址', 'PENDING']
32
+
33
+ module CR19000_20
34
+ module_function
35
+
36
+ def 静态用户地址 conf
37
+ tab = []
38
+ (conf['ip'] || []).each do|part|
39
+ part.split("\n").each do|line|
40
+ next unless line.include? 'subscriber session static ip'
41
+ words = line.split(' ')
42
+ tab << words
43
+ end
44
+ end
45
+ tab
46
+ end
47
+
48
+ def 静态接口地址 raw,*guards
49
+ tab = []
50
+ # PENDING
51
+ return tab
52
+ end
53
+
54
+ def 静态域地址 raw,*guards
55
+ tab = []
56
+ # PENDING
57
+ return tab
58
+ end
59
+ end
60
+ ```
@@ -0,0 +1,26 @@
1
+
2
+ # CX600-X16A
3
+
4
+ ```ruby
5
+ @sign << ['CX600-X16A', '静态路由']
6
+
7
+ module CX600_X16A
8
+ module_function
9
+
10
+ def 静态路由 配置散列
11
+ static_routes = []
12
+ ['ip','ipv6'].each do|tag|
13
+ (配置散列[tag] || []).each do|part|
14
+ if part.include?('route-static')
15
+ part.split("\n").each do|line|
16
+ items = line.split(" ")
17
+ record = items[2].include?('vpn-') ? ["static:#{items[3]}"]+items[4..-1] : ["static"]+items[2..-1]
18
+ static_routes << record
19
+ end
20
+ end
21
+ end
22
+ end
23
+ return static_routes
24
+ end
25
+ end
26
+ ```
@@ -0,0 +1,26 @@
1
+
2
+ # CX600-X8A 静态信息
3
+
4
+ ```ruby
5
+ @sign << ['CX600-X8A', '静态路由']
6
+
7
+ module CX600_X8A
8
+ module_function
9
+
10
+ def 静态路由 配置散列
11
+ static_routes = []
12
+ ['ip','ipv6'].each do|tag|
13
+ (配置散列[tag] || []).each do|part|
14
+ if part.include?('route-static')
15
+ part.split("\n").each do|line|
16
+ items = line.split(" ")
17
+ record = items[2].include?('vpn-') ? ["static:#{items[3]}"]+items[4..-1] : ["static"]+items[2..-1]
18
+ static_routes << record
19
+ end
20
+ end
21
+ end
22
+ end
23
+ return static_routes
24
+ end
25
+ end
26
+ ```
@@ -0,0 +1,104 @@
1
+
2
+ # M6000-16E 静态信息
3
+
4
+ ```ruby
5
+ @sign << ['M6000-16E', '静态路由']
6
+
7
+ module M6000_16E
8
+ module_function
9
+
10
+ def 静态路由 配置散列
11
+ static_routes = []
12
+ ['static','ipv6-static-route'].each do|tag|
13
+ lines = (配置散列[tag] || "").split("\n")
14
+ lines.each_with_index do|line,index|
15
+ next unless line.include?('route ')
16
+ if line.size==80 && lines[index+1][0..1]!='ip'
17
+ items = (line+lines[index+1]).split(" ")
18
+ else
19
+ items = line.split(" ")
20
+ end
21
+ if items[2].include?('vrf')
22
+ head = "static:#{items[3]}"
23
+ tail = items[4].include?(':') ? items[4].split('/')+items[5..-1] : items[4..-1]
24
+ else
25
+ head = "static"
26
+ tail = items[2].include?(':') ? items[2].split('/')+items[3..-1] : items[2..-1]
27
+ end
28
+ static_routes << [head]+tail
29
+ end
30
+ end
31
+ return static_routes
32
+ end
33
+ end
34
+ ```
35
+
36
+ ```ruby
37
+ @sign << ['M6000-16E', '静态用户地址']
38
+ @sign << ['M6000-16E', '静态接口地址']
39
+ @sign << ['M6000-16E', '静态域地址']
40
+
41
+ module M6000_16E
42
+ module_function
43
+
44
+ def 静态用户地址 conf
45
+ tab = []
46
+ lines = (conf['ip-host'] || "").split("\n")
47
+ lines.each_with_index do|line,index|
48
+ next unless line.include?('ip-host')
49
+ if line.size==80 && lines[index+1][0..1]!=' '
50
+ words = (line+lines[index+1]).split(" ")
51
+ else
52
+ words = line.split(' ')
53
+ end
54
+ tab << words
55
+ end
56
+ tab
57
+ end
58
+
59
+ def 静态接口地址 raw,*guards
60
+ tab = []
61
+ content = raw.split('show arp dynamic')[1].to_s.split('HB-')[0].to_s
62
+ textlist = content.split('--------------------------------------------------------------------------------')[1].to_s
63
+ textlist.split("\n").each do|line|
64
+ item = line.strip.split(' ')
65
+ if item.size == 1
66
+ tab[-1][3] += item[0]
67
+ elsif item.size == 2
68
+ tab[-1][3] += item[0]
69
+ tab[-1][-1]+= item[1]
70
+ else
71
+ tab << item
72
+ end
73
+ end
74
+
75
+ content = raw.split('show arp permanent')[1].to_s.split('HB-')[0].to_s
76
+ textlist = content.split('--------------------------------------------------------------------------------')[1].to_s
77
+ textlist.split("\n").each do|line|
78
+ item = line.strip.split(' ')
79
+ if item.size == 1
80
+ tab[-1][3] += item[0]
81
+ else
82
+ tab << item
83
+ end
84
+ end
85
+ return tab
86
+ end
87
+
88
+ def 静态域地址 raw,*guards
89
+ tab = []
90
+ content = raw.split('show subscriber user-type ip-host')[1].to_s.split('HB-')[0].to_s
91
+ textlist = content.split('--------------------------------------------------------------------------------')[1].to_s
92
+ textlist.split("\n").each do|line|
93
+ item = line.strip.split(' ')
94
+ if item.size == 1
95
+ tab[-1][1] += item[0]
96
+ else
97
+ item.insert 1, ''
98
+ tab << item
99
+ end
100
+ end
101
+ return tab
102
+ end
103
+ end
104
+ ```