1
00:00:09,780 --> 00:00:12,360
让我们为路由器 2 复制它。

2
00:00:12,360 --> 00:00:20,250
我相信路由器 2 的 IP 是
管理 IP 10.0.102.3。

3
00:00:20,250 --> 00:00:25,950
还有一个用于防火墙，
我们将其命名为 fw1。

4
00:00:25,950 --> 00:00:28,890
我相信IP是4。

5
00:00:28,890 --> 00:00:33,360
并且设备类型
将是 cisco_asa。

6
00:00:33,360 --> 00:00:36,310
让我们创建一个列表，其中
包含所有这些设备。

7
00:00:36,310 --> 00:00:43,020
所以 devices = 等于
r1、r2 和 fw1。

8
00:00:43,020 --> 00:00:49,390
接下来我要做的
是创建一个函数。

9
00:00:49,390 --> 00:00:51,090
所以我
创建一个函数的原因

10
00:00:51,090 --> 00:00:54,310
是因为我想发送
两个不同的命令。

11
00:00:54,310 --> 00:00:57,330
一是show
接口ip简介

12
00:00:57,330 --> 00:00:59,640
用于防火墙和
显示ip接口简介

13
00:00:59,640 --> 00:01:00,445
对于路由器。

14
00:01:00,445 --> 00:01:02,820
我将创建一个具有 if 语句的函数
。

15
00:01:02,820 --> 00:01:05,680
if 语句将
根据主机名进行匹配。

16
00:01:05,680 --> 00:01:07,720
所以我需要先得到
主机名，

17
00:01:07,720 --> 00:01:14,700
因为我知道我的路由器的
主机名是 Rack102-R1，

18
00:01:14,700 --> 00:01:19,140
机架 102-R2 和机架 102-FW1。

19
00:01:19,140 --> 00:01:22,740
所以我能做的是我可以
创建一个 if 条件

20
00:01:22,740 --> 00:01:27,180
表示主机名
是否包含 fw，如防火墙，

21
00:01:27,180 --> 00:01:29,710
那么你应该
运行这个命令。

22
00:01:29,710 --> 00:01:32,200
否则，运行其他东西。

23
00:01:32,200 --> 00:01:34,210
所以让我们创建一个函数。

24
00:01:34,210 --> 00:01:39,580
所以让我们把它命名为
定义——

25
00:01:39,580 --> 00:01:42,120
所以我们将创建
一个定义，它

26
00:01:42,120 --> 00:01:49,410
将是-- 让我们将其命名为 device_configs，

27
00:01:49,410 --> 00:01:50,850
所以设备配置。

28
00:01:50,850 --> 00:01:54,405
让我们给一个临时的
占位符名称为 dev。

29
00:01:57,670 --> 00:02:00,550
在这里面，我要做的第一件事就是建立

30
00:02:00,550 --> 00:02:03,282
我的连接，所以
dev.establish_connection。

31
00:02:09,220 --> 00:02:12,460
因此，与
路由器与设备建立连接。

32
00:02:12,460 --> 00:02:16,300
和 dev.enable。

33
00:02:16,300 --> 00:02:17,770
所以我需要运行
启用命令

34
00:02:17,770 --> 00:02:19,660
进入特权模式。

35
00:02:19,660 --> 00:02:22,060
然后我会
找到主机名。

36
00:02:22,060 --> 00:02:24,430
要找到主机名，我们
可以给出命令 show

37
00:02:24,430 --> 00:02:29,530
运行管道包括主机名，并且
将该输出拆分为

38
00:02:29,530 --> 00:02:30,770
主机名路径。

39
00:02:30,770 --> 00:02:34,480
所以主机名等于--

40
00:02:34,480 --> 00:02:38,590
我会说 dev.send_command。

41
00:02:38,590 --> 00:02:40,210

我们要发送哪个命令？

42
00:02:40,210 --> 00:02:45,160
显示运行管道包括主机名。

43
00:02:45,160 --> 00:02:48,400
无论我们
得到什么输出，我们都会将其拆分

44
00:02:48,400 --> 00:02:49,900
基于空白。

45
00:02:49,900 --> 00:02:53,320
而我们只会
捕获索引值

46
00:02:53,320 --> 00:02:55,570
1，这是主机名部分。

47
00:02:55,570 --> 00:02:57,430
所以在这个时候
我应该

48
00:02:57,430 --> 00:03:00,460
获取设备的主机名。

49
00:03:00,460 --> 00:03:03,340
主机名将
存储在变量中

50
00:03:03,340 --> 00:03:05,290
称为主机名。

51
00:03:05,290 --> 00:03:07,130
现在我可以创建
我的 if 条件。

52
00:03:07,130 --> 00:03:15,040
因此，如果 fw 以
主机名点小写形式存在，

53
00:03:15,040 --> 00:03:18,280
所以如果fw在
主机名中，那么我

54
00:03:18,280 --> 00:03:20,530
将发送名为--的命令

55
00:03:20,530 --> 00:03:22,690
假设输出 =
dev.send_command。

56
00:03:28,480 --> 00:03:35,963
我们要发送命令
show interface ip brief。

57
00:03:35,963 --> 00:03:36,880
这就是命令。

58
00:03:36,880 --> 00:03:39,390
所以我们会发送命令
show interface ip brief

59
00:03:39,390 --> 00:03:43,380
并存储输出，存储
信息，那个数据

60
00:03:43,380 --> 00:03:47,290
在变量
中称为输出。

61
00:03:47,290 --> 00:03:49,290
接下来
我要做的事

62
00:03:49,290 --> 00:03:54,900
然后我将创建
一个 else 语句。

63
00:03:54,900 --> 00:03:57,720
else 语句会
对路由器说，

64
00:03:57,720 --> 00:04:00,720
我会说输出
= dev.send_command。

65
00:04:05,820 --> 00:04:10,510
在这里我会发送
show ip interface brief。

66
00:04:10,510 --> 00:04:13,320
所以如果是路由器，我会
发送show ip interface brief。

67
00:04:13,320 --> 00:04:15,900
如果是防火墙--
怎么会

68
00:04:15,900 --> 00:04:17,370
它知道它是防火墙吗？

69
00:04:17,370 --> 00:04:19,089
基于主机名。

70
00:04:19,089 --> 00:04:21,899
所以如果主机名
是防火墙，那么

71
00:04:21,899 --> 00:04:26,010
包含 fw 字，那么他
就会知道这是防火墙

72
00:04:26,010 --> 00:04:28,515
他会发送命令
show interface ip brief。

73
00:04:28,515 --> 00:04:32,200
否则，他会发送
show ip interface brief。

74
00:04:32,200 --> 00:04:37,920
接下来我
要做的是打印——

75
00:04:37,920 --> 00:04:39,990
让我们打印主机名。

76
00:04:43,070 --> 00:04:45,270
让我们打印主机名。

77
00:04:45,270 --> 00:04:47,760
因此，让我们为此使用一个
f-string。

78
00:04:47,760 --> 00:04:52,820
所以让我们说
连接到设备。

79
00:04:52,820 --> 00:05:00,028
我们将连接到
主机名，这是变量。

80
00:05:00,028 --> 00:05:02,570
所以我基本上是在调用我的 f 字符串中的变量。

81
00:05:07,020 --> 00:05:09,600
所以这应该打印
连接到设备，

82
00:05:09,600 --> 00:05:13,080
设备的主机名。

83
00:05:13,080 --> 00:05:15,480
接下来我要做的事情


84
00:05:15,480 --> 00:05:18,300
现在我将调用
模板，它

85
00:05:18,300 --> 00:05:20,640
目前我还没有真正创建
。

86
00:05:20,640 --> 00:05:26,650
但我会调用
模板并解析数据。

87
00:05:26,650 --> 00:05:31,140
所以我要说的是 open--

88
00:05:31,140 --> 00:05:32,220
文件名是什么？

89
00:05:32,220 --> 00:05:33,510
模板文件名是什么？

90
00:05:33,510 --> 00:05:41,830
让我们将文件
名称保留为 interface_brief，

91
00:05:41,830 --> 00:05:46,620
所以interface_brief.template。

92
00:05:46,620 --> 00:05:48,180
这将是我的文件名。

93
00:05:48,180 --> 00:05:51,720
并将此文件作为临时文件打开。

94
00:05:51,720 --> 00:05:54,340
打开这个
文件后，我们需要什么？

95
00:05:54,340 --> 00:05:56,940
我们需要使用 TextFSM 解析
数据。

96
00:05:56,940 --> 00:06:07,620
所以 fsm = textfsm.TextFSM,
解析temp的数据。

97
00:06:07,620 --> 00:06:18,390
然后 result =
fsm.ParseText 的——

98
00:06:18,390 --> 00:06:21,780
我相信这是输出。

99
00:06:21,780 --> 00:06:24,630
输出是我拥有的数据


100
00:06:24,630 --> 00:06:27,870
是我拥有的变量
存储了show ip interface

101
00:06:27,870 --> 00:06:31,140
简介或显示
接口ip简介。

102
00:06:31,140 --> 00:06:36,030
一旦我有了这个，我唯一需要的就是打印。

103
00:06:36,030 --> 00:06:47,850
所以我会打印 fsm.header，然后
我会打印结果。就是这样。

104
00:06:47,850 --> 00:06:49,830
我现在唯一需要的是


105
00:06:49,830 --> 00:06:52,530
使用 for 循环调用此函数
。

106
00:06:52,530 --> 00:06:53,910
因为我有三个设备。

107
00:06:53,910 --> 00:06:57,220
我有路由器 1，路由器
2，我有防火墙。

108
00:06:57,220 --> 00:07:00,847
所以我需要为多个设备重新执行该
功能。

109
00:07:00,847 --> 00:07:02,430
所以我要
创建一个for循环

110
00:07:02,430 --> 00:07:03,745
调用该功能。

111
00:07:03,745 --> 00:07:04,870
因此，让我们创建一个 for 循环。

112
00:07:04,870 --> 00:07:08,710
所以对于设备中的项目——

113
00:07:08,710 --> 00:07:13,440
所以设备是我在这里的变量
包含我所有的网络

114
00:07:13,440 --> 00:07:15,930
设备、R1、R2 和防火墙 1。

115
00:07:15,930 --> 00:07:23,890
所以对于设备中的项目，我
会说 device_configs。

116
00:07:23,890 --> 00:07:27,000
这将是项目。

117
00:07:27,000 --> 00:07:27,500
就是这样。

118
00:07:27,500 --> 00:07:28,453
这就是我所需要的。

119
00:07:28,453 --> 00:07:29,620
所以这应该是我的剧本。

120
00:07:29,620 --> 00:07:32,210
那么，幕后究竟会发生什么
？

121
00:07:32,210 --> 00:07:34,930
所以只要我
执行脚本，

122
00:07:34,930 --> 00:07:36,588
我的 netmiko 会变得很重要。

123
00:07:36,588 --> 00:07:38,380
我的 ConnectHandler
会很重要。

124
00:07:38,380 --> 00:07:41,360
我的 TextFSM 将变得很重要。

125
00:07:41,360 --> 00:07:43,060
我会
连接到这些路由器。

126
00:07:43,060 --> 00:07:48,160
并且 item 默认情况下
将成为第一项

127
00:07:48,160 --> 00:07:49,285
在列表中，即 r1。

128
00:07:49,285 --> 00:07:51,392
所以项目将是 r1。

129
00:07:51,392 --> 00:07:54,290
所以它会执行
这个函数，

130
00:07:54,290 --> 00:07:56,080
这是device_config。

131
00:07:56,080 --> 00:08:00,370
他会建立
到r1的连接，

132
00:08:00,370 --> 00:08:04,360
启用，检查
主机名，获取主机名。

133
00:08:04,360 --> 00:08:07,120
由于主机名
不包含防火墙，

134
00:08:07,120 --> 00:08:08,440
他不会执行此操作。

135
00:08:08,440 --> 00:08:10,390
他会执行
else语句，

136
00:08:10,390 --> 00:08:12,880
打印连接到设备 r1。

137
00:08:12,880 --> 00:08:17,410
然后以temp打开
模板文件，

138
00:08:17,410 --> 00:08:20,290
根据
模板文件解析数据，

139
00:08:20,290 --> 00:08:23,680
然后打印FSM的
标头

140
00:08:23,680 --> 00:08:25,780
然后打印结果。

141
00:08:25,780 --> 00:08:28,660
同样，item
将变为r2。

142
00:08:28,660 --> 00:08:32,440
他会执行函数
并做同样的事情。

143
00:08:32,440 --> 00:08:35,440
然后，再次，项目
将更改为 fw1，

144
00:08:35,440 --> 00:08:37,450
他会重新执行
这整件事。

145
00:08:37,450 --> 00:08:39,549
而这一次，它将
匹配 if 语句，

146
00:08:39,549 --> 00:08:42,470
并且防火墙命令
将被执行。

147
00:08:42,470 --> 00:08:43,570
所以这应该足够了。

148
00:08:43,570 --> 00:08:45,290
这个脚本应该
足够好。

149
00:08:45,290 --> 00:08:48,610
我们现在需要
创建我们的模板。

150
00:08:48,610 --> 00:08:51,370
那么为了创建我们的
模板，我们需要什么？

151
00:08:51,370 --> 00:08:55,600
实际上，让我们创建一个新的
文件，因此 File，New File。

152
00:08:55,600 --> 00:09:02,890
让我们将其保存为
interface_brief.template。

153
00:09:05,513 --> 00:09:07,555
这是我们在脚本中提供的文件名。

154
00:09:10,520 --> 00:09:13,400
让我们更换。

155
00:09:13,400 --> 00:09:14,540
好的。

156
00:09:14,540 --> 00:09:16,470
在这里，我需要什么？

157
00:09:16,470 --> 00:09:18,470
现在，如果你还记得，
我告诉过你，我只是

158
00:09:18,470 --> 00:09:22,160
想要捕获接口，
IP地址，状态，

159
00:09:22,160 --> 00:09:23,550
和协议。

160
00:09:23,550 --> 00:09:26,340
我真的不想要
OK和方法。

161
00:09:26,340 --> 00:09:30,020
所以我需要为我创建四个变量


162
00:09:30,020 --> 00:09:32,690
能够捕捉到这一点。

163
00:09:32,690 --> 00:09:36,470
让我们创建这四个变量。

164
00:09:36,470 --> 00:09:39,590
所以我的第一个变量是
接口。

165
00:09:39,590 --> 00:09:41,750
所以让我们命名它。

166
00:09:41,750 --> 00:09:44,650
所以重视接口。

167
00:09:44,650 --> 00:09:47,170
以及我将如何
匹配界面？

168
00:09:47,170 --> 00:09:50,680
所以接口可以是 gig 1，gig 2。

169
00:09:50,680 --> 00:09:54,520
所以我实际上可以去给
类似开括号的东西

170
00:09:54,520 --> 00:10:01,540
并说千兆位、千兆位或
以太网或快速以太网。

171
00:10:01,540 --> 00:10:04,390
或者我可能只是
对此很模糊

172
00:10:04,390 --> 00:10:07,780
通过说反斜杠大写 S
plus，它只是说什么

173
00:10:07,780 --> 00:10:08,860
那不是空白。

174
00:10:08,860 --> 00:10:11,770
所以我真的不在乎
是千兆还是10

175
00:10:11,770 --> 00:10:13,780
演出或以太网。

176
00:10:13,780 --> 00:10:17,680
我真的不在乎，只要
不是空白，一个

177
00:10:17,680 --> 00:10:19,170
或者更多。

178
00:10:19,170 --> 00:10:23,590
这是我的第一个变量。

179
00:10:23,590 --> 00:10:27,600
第二个变量
是，值是——

180
00:10:27,600 --> 00:10:29,170
我相信这是IP地址。

181
00:10:29,170 --> 00:10:30,300
比方说ip。

182
00:10:30,300 --> 00:10:31,860
以及我将如何
匹配IP？

183
00:10:31,860 --> 00:10:34,830
同样，这可能是
反斜杠大写 S 加。

184
00:10:34,830 --> 00:10:38,280
所以任何不是空白
空间的东西，我都可以匹配。

185
00:10:38,280 --> 00:10:46,230
对于我的身份，对于
身份，我会匹配——

186
00:10:46,230 --> 00:10:47,490
让我们再次让它变得不同。

187
00:10:47,490 --> 00:10:53,280
我可以再做一个
反斜杠大写的 S 加号。

188
00:10:53,280 --> 00:10:54,310
我可以做到。

189
00:10:54,310 --> 00:10:56,450
或者，如果我愿意，我可以非常具体。

190
00:10:56,450 --> 00:10:58,340
这次说点具体的吧。

191
00:10:58,340 --> 00:11:02,280
所以让我们说我想要
向上或我想要向下

192
00:11:02,280 --> 00:11:13,570
或者我想从行政上下来。

193
00:11:13,570 --> 00:11:16,240
所以三个选择
我有，就是

194
00:11:16,240 --> 00:11:18,460
将匹配状态。

195
00:11:18,460 --> 00:11:22,000
然后让我们为协议再创建一个
。

196
00:11:22,000 --> 00:11:26,210
这将是，
比方说，向上或向下。

197
00:11:26,210 --> 00:11:29,200
所以我创建了四个变量。

198
00:11:29,200 --> 00:11:37,360
现在让我们开始我们的模板并
捕获确切的信息

199
00:11:37,360 --> 00:11:38,180
我们需要的。

200
00:11:38,180 --> 00:11:42,170
所以我们必须非常小心
输出的样子。

201
00:11:42,170 --> 00:11:46,540
所以，如果我回顾一下我的
show ip interface brief，

202
00:11:46,540 --> 00:11:48,760
如果我看一下show
ip界面简介，

203
00:11:48,760 --> 00:11:53,920
可以看到千兆前没有
空格。

204
00:11:53,920 --> 00:11:56,950
所以这可以
直接匹配。

205
00:11:56,950 --> 00:11:59,050
然后这里有一些
空格。

206
00:11:59,050 --> 00:12:00,580
然后是一些IP。

207
00:12:00,580 --> 00:12:02,320
然后有一些空白。

208
00:12:02,320 --> 00:12:05,920
然后是一些我不想捕捉的角色
。

209
00:12:05,920 --> 00:12:07,690
然后有一些空间。

210
00:12:07,690 --> 00:12:10,360
然后有一些字符
我不需要匹配。

211
00:12:10,360 --> 00:12:11,740
然后有一些空间。

212
00:12:11,740 --> 00:12:14,320
然后是向上，
我有一些空间，

213
00:12:14,320 --> 00:12:15,895
然后我就起来了。

214
00:12:15,895 --> 00:12:17,270
所以让我们继续
并匹配它。

215
00:12:17,270 --> 00:12:20,470
所以第一件事就是开始。

216
00:12:20,470 --> 00:12:22,730
在这里我不需要——

217
00:12:22,730 --> 00:12:24,550
我只能给——

218
00:12:24,550 --> 00:12:28,060
让我们在这里给两个空格
并从我的插入符号开始。

219
00:12:28,060 --> 00:12:30,710
插入符号表示您的行的开始
。

220
00:12:30,710 --> 00:12:36,790
所以由于千兆之前没有
空间，

221
00:12:36,790 --> 00:12:38,890

千兆没有空间，我可以直接——

222
00:12:38,890 --> 00:12:40,390
我不需要
在这里给任何空间。

223
00:12:40,390 --> 00:12:46,540
我可以说美元
并匹配INTERFACE。

224
00:12:46,540 --> 00:12:49,030
那么接口匹配后，
接下来我有什么？

225
00:12:49,030 --> 00:12:50,660
我有一些空白。

226
00:12:50,660 --> 00:12:52,970
所以我需要匹配空格。

227
00:12:52,970 --> 00:12:58,690
所以反斜杠 S，一个或多个。

228
00:12:58,690 --> 00:13:02,470
在空格之后，我
有地址IP。

229
00:13:02,470 --> 00:13:08,320
所以这将是
再次美元和匹配IP。

230
00:13:08,320 --> 00:13:10,970
在 IP 之后，我有
一些空格。

231
00:13:10,970 --> 00:13:14,500
所以让我们匹配一下，
反斜杠 S plus，

232
00:13:14,500 --> 00:13:17,380
与我的空白相匹配。

233
00:13:17,380 --> 00:13:20,560
在空格之后，我
有一些字符，

234
00:13:20,560 --> 00:13:21,830
一些单词字符。

235
00:13:21,830 --> 00:13:27,890
所以让我们把反斜杠
W加，所以一个或多个。

236
00:13:27,890 --> 00:13:30,310
然后我
有一个空白，

237
00:13:30,310 --> 00:13:34,520
所以我可以说一个反斜杠
S，一个或多个。

238
00:13:34,520 --> 00:13:40,060
然后我又来了一些词，
字符所以反斜杠W加。

239
00:13:40,060 --> 00:13:45,910
然后在那之后，我有一个空白
空格，所以反斜杠 S 加。

240
00:13:45,910 --> 00:13:48,610
然后我就有了我的状态。

241
00:13:48,610 --> 00:13:53,500
这将是
美元状态。

242
00:13:53,500 --> 00:14:00,160
然后我有空白
空格，所以反斜杠 S 加。

243
00:14:00,160 --> 00:14:05,920
然后我有了我的协议，
这将是 PROTOCOL。

244
00:14:05,920 --> 00:14:10,510
一旦这一行结束，
我们想要结果

245
00:14:10,510 --> 00:14:17,620
应该显示并且应该
使用TextFSM解析。

246
00:14:17,620 --> 00:14:21,700
所以我们会记录
结果。所以冲刺更大

247
00:14:21,700 --> 00:14:23,950
比签署记录。

248
00:14:23,950 --> 00:14:24,530
就是这样。

249
00:14:24,530 --> 00:14:27,520
这就是我的脚本所需要的。

250
00:14:27,520 --> 00:14:32,950
让我们保存它，然后
测试脚本。

251
00:14:32,950 --> 00:14:37,050
所以我会回到我的本地机器。

252
00:14:37,050 --> 00:14:40,050
让我们做一场表演——

253
00:14:40,050 --> 00:14:43,150
我相信我的名字是
show_ip_int_brief.py。

254
00:14:48,060 --> 00:14:53,812
让我们复制这个并复制
interface_brief.template。

255
00:14:56,800 --> 00:15:01,630
所以我现在已经将这两个
文件复制到我的 Ubuntu 机器上。

256
00:15:01,630 --> 00:15:08,580
所以让我们通过说
python3 show_ip_int_brief.py 来执行它。

257
00:15:08,580 --> 00:15:12,840
所以这应该为模板文件调用


258
00:15:12,840 --> 00:15:18,070
并将我显示为每个路由器的列表
。

259
00:15:18,070 --> 00:15:24,832
所以如果我回去看看我的
脚本，我的路由器就在这里，

260
00:15:24,832 --> 00:15:26,040
我与路由器的连接。

261
00:15:26,040 --> 00:15:30,390
我有一个函数说
如果主机名是防火墙，

262
00:15:30,390 --> 00:15:32,010
它将执行此命令。

263
00:15:32,010 --> 00:15:33,677

这个命令的输出会

264
00:15:33,677 --> 00:15:35,760
存储在变量
称为输出，我是

265
00:15:35,760 --> 00:15:39,270
将使用 TextFSM 进行解析。

266
00:15:39,270 --> 00:15:40,200
所以让我们去检查一下。

267
00:15:40,200 --> 00:15:45,900
所以你现在可以看到，我
有打印语句，它

268
00:15:45,900 --> 00:15:51,420
基本上说连接
到设备Rack102-R1。

269
00:15:51,420 --> 00:15:54,750
我已连接到
设备 Rack102-R2，然后

270
00:15:54,750 --> 00:15:55,890
我的防火墙。

271
00:15:55,890 --> 00:16:00,040
并且所有接口都显示为列表中的列表。

272
00:16:00,040 --> 00:16:10,440
其实，让我去放点东西在这里，就是让我们

273
00:16:10,440 --> 00:16:20,480
做一个打印反斜杠 n 以便
我们有一些空格

274
00:16:20,480 --> 00:16:22,050
它们之间。

275
00:16:22,050 --> 00:16:23,960
让我们保存它。

276
00:16:23,960 --> 00:16:25,625
让我们重新复制一下。

277
00:16:29,340 --> 00:16:33,340
让我们重新执行它。

278
00:16:33,340 --> 00:16:38,490
再次，我应该看到
接口，IP 地址，

279
00:16:38,490 --> 00:16:42,540
接口名称、
状态和协议

280
00:16:42,540 --> 00:16:43,980
对于所有这些路由器。

281
00:16:47,460 --> 00:16:51,470
所以有了这个观点，基本
满足要求

282
00:16:51,470 --> 00:16:55,010
我们说过，
解析节目数据

283
00:16:55,010 --> 00:16:58,550
Cisco
路由器的 IP 接口简介并显示接口 IP

284
00:16:58,550 --> 00:17:01,330
防火墙简介。

285
00:17:01,330 --> 00:17:04,329
所以让我们再举一个例子。

286
00:17:04,329 --> 00:17:08,140
这一次，我们将从网上获取一些
模板。

287
00:17:08,140 --> 00:17:11,460
现在，如果你真的
在 Google 上搜索一些东西

288
00:17:11,460 --> 00:17:13,950
像 Cisco 的 TextFSM
模板，

289
00:17:13,950 --> 00:17:17,400
你会很容易找到成百上千的模板

290
00:17:17,400 --> 00:17:19,480
可供您使用。

291
00:17:19,480 --> 00:17:24,450
所以你可以把它们
并使用那些模板

292
00:17:24,450 --> 00:17:26,310
基本上解析数据。

293
00:17:26,310 --> 00:17:27,970
让我们实际尝试一下。

294
00:17:27,970 --> 00:17:43,260
所以我会去谷歌和
我会搜索TextFSM

295
00:17:43,260 --> 00:17:46,890
思科的模板。

296
00:17:46,890 --> 00:17:49,320
现在，您会发现许多
模板可用。

297
00:17:49,320 --> 00:17:55,410
这里有一个
我们在这里看到的模板是networktocode。

298
00:17:55,410 --> 00:17:57,850
这里有很多
可用的模板，

299
00:17:57,850 --> 00:17:59,350
这是现成的。

300
00:17:59,350 --> 00:18:00,840
你可以做的
是去文件

301
00:18:00,840 --> 00:18:06,030
并下载所有这些
模板供您使用。

302
00:18:06,030 --> 00:18:10,530
再次感谢
networktocode

303
00:18:10,530 --> 00:18:12,300
谁提供了这个。

304
00:18:12,300 --> 00:18:14,310
所以你实际上可以
看看这些模板

305
00:18:14,310 --> 00:18:17,500
并使用它们来解析数据。

306
00:18:17,500 --> 00:18:20,790
所以我所做的是我已经
下载了这些模板

307
00:18:20,790 --> 00:18:24,090
我已经把它们放在了我的本地目录中

308
00:18:24,090 --> 00:18:25,990
内模板。

309
00:18:25,990 --> 00:18:29,250
所以如果我真的做一个 cd
templates 并做一个 ls，

310
00:18:29,250 --> 00:18:31,470
你会发现所有
show命令，

311
00:18:31,470 --> 00:18:35,730
可从互联网上轻松获得的模板


312
00:18:35,730 --> 00:18:37,690
你可以用来解析数据。

313
00:18:37,690 --> 00:18:39,630
所以让我，事实上，
使用其中一个

314
00:18:39,630 --> 00:18:41,820
并向您展示它是如何工作的。

315
00:18:41,820 --> 00:18:47,100
所以也许我可以使用 cisco_ios_show_ip_bgp 这个
，

316
00:18:47,100 --> 00:18:50,580
show IP BGP summary
命令，解析数据。

317
00:18:50,580 --> 00:18:53,160
我相信此时
我有 BGP

318
00:18:53,160 --> 00:18:55,200
在路由器 1 上预先配置。

319
00:18:55,200 --> 00:18:58,620
所以如果我做一个 show
ip bgp 总结，

320
00:18:58,620 --> 00:19:01,770
我有两个邻居，r2 和——

321
00:19:01,770 --> 00:19:03,760
我相信这就是
防火墙。

322
00:19:03,760 --> 00:19:05,880
所以我现在有两个
邻居。

323
00:19:05,880 --> 00:19:08,070
如果我想
解析数据，我可以

324
00:19:08,070 --> 00:19:13,480
使用现成的模板
解析数据。

325
00:19:13,480 --> 00:19:18,630
所以我已经把它们放在了我的本地文件夹中。

326
00:19:18,630 --> 00:19:20,380
让我们回过头来
看看那个。

327
00:19:20,380 --> 00:19:25,710
让我们做一只猫，
看看模板，

328
00:19:25,710 --> 00:19:29,730
这是BGP摘要之一。

329
00:19:29,730 --> 00:19:31,288
我相信它就在这里。

330
00:19:31,288 --> 00:19:32,580
那么让我们看看这个模板。

331
00:19:35,280 --> 00:19:38,070
如果您看到，有一个现成的模板可用，

332
00:19:38,070 --> 00:19:42,540
这基本上是跟踪
设备的路由器区域。

333
00:19:42,540 --> 00:19:46,080
它正在跟踪本地
AS、地址族、BGP

334
00:19:46,080 --> 00:19:49,380
邻居，邻居
AS，up_down状态，

335
00:19:49,380 --> 00:19:54,060
以及这条路线可能已经激活了多长时间。

336
00:19:54,060 --> 00:19:59,760
这是要匹配的语法或
正则表达式。

337
00:19:59,760 --> 00:20:02,340
所以这是一个现成的
可用模板。

338
00:20:02,340 --> 00:20:06,550
对于 OSPF，
对于 BGP，对于 EIGRP，有很多。

339
00:20:06,550 --> 00:20:10,650
所以如果你看这里，我已经下载了这个
整个列表，其中

340
00:20:10,650 --> 00:20:12,970
您可以下载并测试它们。

341
00:20:12,970 --> 00:20:15,870
所以我能做的就是
只写一个脚本

342
00:20:15,870 --> 00:20:17,590
这需要该模板。

343
00:20:17,590 --> 00:20:20,180
所以我能做的就是回到——

344
00:20:23,580 --> 00:20:27,450
让我们回到我们之前使用的旧
脚本，

345
00:20:27,450 --> 00:20:29,790
show IP interface 简介一。

346
00:20:29,790 --> 00:20:35,970
而我们可以使用这个脚本
去实际使用

347
00:20:35,970 --> 00:20:39,690

显示IP BGP摘要的模板。

348
00:20:39,690 --> 00:20:42,720
所以我相信对于防火墙，
命令是不同的。

349
00:20:42,720 --> 00:20:47,430
我相信命令
是show bgp summary。

350
00:20:47,430 --> 00:20:53,080
而对于路由器，它
是show ip bgp summary。

351
00:20:53,080 --> 00:20:55,190
所以让我们改变它。

352
00:20:55,190 --> 00:20:58,190
让我们也放
类似的东西，

353
00:20:58,190 --> 00:21:01,820
也许是为了让它
打印得很好，也许

354
00:21:01,820 --> 00:21:04,980
我们可以在它周围放一些
哈希。

355
00:21:04,980 --> 00:21:15,020
所以让我们放一些东西
比如打印反斜杠

356
00:21:15,020 --> 00:21:24,830
n 加反斜杠 n 加--

357
00:21:24,830 --> 00:21:31,380
假设哈希乘以 50。

358
00:21:31,380 --> 00:21:32,130
让我们打印一下。

359
00:21:32,130 --> 00:21:33,880
我不需要这个。

360
00:21:33,880 --> 00:21:36,870
让我们更改文件
名称以使用模板

361
00:21:36,870 --> 00:21:39,130
我们想要使用的。

362
00:21:39,130 --> 00:21:44,790
所以我可以回到我的
文件夹并使用这个模板。

363
00:21:44,790 --> 00:21:48,375
我相信这是在
模板文件夹里面

364
00:21:48,375 --> 00:21:52,170
斜线文件名。

365
00:21:52,170 --> 00:21:54,210
我不需要授予
只读权限

366
00:21:54,210 --> 00:21:55,620
或任何东西。

367
00:21:55,620 --> 00:21:58,810
其他一切
都保持不变。

368
00:21:58,810 --> 00:22:02,850
让我们将其复制到一个新文件中。

369
00:22:05,420 --> 00:22:10,286
我们将这个
文件命名为 bgp_summary.py。

370
00:22:17,800 --> 00:22:20,890
所以现在我创建了一个
新脚本。

371
00:22:20,890 --> 00:22:23,140
这个脚本
基本上说connect

372
00:22:23,140 --> 00:22:27,010
到路由器1，连接到路由器
2，连接到防火墙，

373
00:22:27,010 --> 00:22:28,820
并获取主机名。

374
00:22:28,820 --> 00:22:30,610
如果主机名
包含防火墙，

375
00:22:30,610 --> 00:22:33,190
然后发送 show BGP
summary 命令。

376
00:22:33,190 --> 00:22:37,330
如果是路由器，发送 show IP
BGP summary 命令并捕获

377
00:22:37,330 --> 00:22:38,020
输出。

378
00:22:38,020 --> 00:22:40,240
然后使用TextFSM
解析数据

379
00:22:40,240 --> 00:22:42,070
使用我实际使用的模板


380
00:22:42,070 --> 00:22:43,840
从网上下载的。

381
00:22:43,840 --> 00:22:47,650
所以我正在使用模板，
我要解析数据。

382
00:22:47,650 --> 00:22:49,370
事实上，让我们执行这个。

383
00:22:49,370 --> 00:22:56,560
所以我会回去
说，把bgp summary.py。

384
00:22:56,560 --> 00:22:57,970
让我们把这个文件。

385
00:22:57,970 --> 00:23:00,010
让我们执行这个。

386
00:23:00,010 --> 00:23:04,150
我相信——让我们做 cd——

387
00:23:04,150 --> 00:23:07,330
我相信我在
正确的文件夹中。

388
00:23:07,330 --> 00:23:09,940
我应该有
BGP summary.py。

389
00:23:09,940 --> 00:23:12,950
所以如果我对 BGP summary.py 做一个 cat
，

390
00:23:12,950 --> 00:23:16,810
这基本上是为模板文件调用


391
00:23:16,810 --> 00:23:19,720
我从网上下载的
。

392
00:23:19,720 --> 00:23:22,720
我正在使用该
文件来解析数据。

393
00:23:22,720 --> 00:23:24,710
让我们执行这个。

394
00:23:24,710 --> 00:23:30,100
所以python3 bgp_summary.py，
这应该去路由器

395
00:23:30,100 --> 00:23:33,610
并执行 show IP BGP
summary 命令然后解析

396
00:23:33,610 --> 00:23:39,430
数据并在列表中给我
格式化本地路由器ID，

397
00:23:39,430 --> 00:23:44,800
本地AS，远端BGP
邻居的IP，远端AS。

398
00:23:44,800 --> 00:23:46,490
它应该给我
所有这些信息。

399
00:23:46,490 --> 00:23:50,800
所以它说没有
这样的文件或文件夹——

400
00:23:50,800 --> 00:23:52,770
让我做一个ls。

401
00:23:52,770 --> 00:23:55,560
啊，文件夹
名称是模板。

402
00:23:55,560 --> 00:24:00,600
所以我需要去
把它改成模板。

403
00:24:00,600 --> 00:24:03,215
让我们保存它并
重新复制文件。

404
00:24:07,190 --> 00:24:08,740
让我们重新执行它。

405
00:24:11,390 --> 00:24:16,210
所以你看，使用
模板或使用 TextFSM

406
00:24:16,210 --> 00:24:21,370
解析数据真的很有帮助，
因为有很多很多

407
00:24:21,370 --> 00:24:23,780
互联网上可用的模板
，

408
00:24:23,780 --> 00:24:27,560
您可以下载
并试用。

409
00:24:27,560 --> 00:24:29,750
我希望此视频
对您有所帮助，

