admin 管理员组

文章数量: 887021


2024年2月19日发(作者:哔哩哔哩下载电脑版官方)

使用show ip route查看某个指定网段的所有内容

show ip route可以说是网络工程师最常用的命令之一,对于查看路由指向、诊断网络问题很有帮助。对于一个大型网络,常常有成百数千条路由,如何才能找到自己需要的路由条目是一件很头疼的事情。

为了解决这个办法,我们常用show ip route | include +网络前缀 的方法来找到匹配的条目。

1. 10.0.0.0/24 is subnetted, 11 subnets

2. O 10.1.3.0 [110/20] via 10.1.1.1, 00:13:28, Ethernet0/0

3. O 10.2.1.0 [110/20] via 10.1.1.1, 00:13:28, Ethernet0/0

4. O 10.1.2.0 [110/20] via 10.1.1.1, 00:13:28, Ethernet0/0

5. O 10.2.2.0 [110/20] via 10.1.1.1, 00:13:28, Ethernet0/0

6. C 10.1.1.0 is directly connected, Ethernet0/0

7. O 10.3.2.0 [110/20] via 10.1.1.1, 00:13:28, Ethernet0/0

8. O 10.2.3.0 [110/20] via 10.1.1.1, 00:13:28, Ethernet0/0

9. O 10.4.2.0 [110/20] via 10.1.1.1, 00:13:30, Ethernet0/0

10. O 10.1.4.0 [110/20] via 10.1.1.1, 00:13:30, Ethernet0/0

11. C 10.1.30.0 is directly connected, Ethernet0/0

12. C 10.1.20.0 is directly connected, Ethernet0/0

13. O 192.168.1.0/24 [110/20] via 10.1.1.1, 00:13:30, Ethernet0/0

14. C 192.168.2.0/24 is directly connected, Ethernet0/0

例如,在上面这张路由表中,我们可以用show ip route | i 192.168.1 很轻易地找到以192.168.1开头的所有条目。

1. R2#show ip route | i 192.168.1

2. O 192.168.1.0/24 [110/20] via 10.1.1.1, 00:15:46, Ethernet0/0

但是对于目的地址也包含我们所需查找的网段时,这条命令就不这么好用了。

例如查找以10.1开头的所有网段:

1. R2#show ip route | i 10.1

2. O 10.1.3.0 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

3. O 10.2.1.0 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

4. O 10.1.2.0 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

5. O 10.2.2.0 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

6. C 10.1.1.0 is directly connected, Ethernet0/0

7. O 10.3.2.0 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

8. O 10.2.3.0 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

9. O 10.4.2.0 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

10. O 10.1.4.0 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

11. C 10.1.30.0 is directly connected, Ethernet0/0

12. C 10.1.20.0 is directly connected, Ethernet0/0

13. O 192.168.1.0/24 [110/20] via 10.1.1.1, 00:18:32, Ethernet0/0

由于大部分路由的目的地址都是10.1.1.1,所以结果中包含了很多条我们不需要的路由。

在这种情况下我们可以使用show ip route的longer-prefixes参数来匹配我们的网段:show ip

route 10.1.0.0 255.255.0.0 longer-prefixes

1. 10.0.0.0/24 is subnetted, 11 subnets

2. O 10.1.3.0 [110/20] via 10.1.1.1, 00:21:16, Ethernet0/0

3. O 10.1.2.0 [110/20] via 10.1.1.1, 00:21:16, Ethernet0/0

4. C 10.1.1.0 is directly connected, Ethernet0/0

5. O 10.1.4.0 [110/20] via 10.1.1.1, 00:21:16, Ethernet0/0

6. C 10.1.30.0 is directly connected, Ethernet0/0

7. C 10.1.20.0 is directly connected, Ethernet0/0

结果显示出了10.1.0.0/16及其子网的所有路由条目,符合我们的要求。

当然我们也可利用show ip route list + 访问控制列表(ACL) 的方法来实现网段的匹配。

1. R2(config)#access-list 1 per 10.1.0.0 0.0.255.255

2. R2#sh ip route list 1

3. O 10.1.3.0 [110/20] via 10.1.1.1, 00:35:15, Ethernet0/0

4. O 10.1.2.0 [110/20] via 10.1.1.1, 00:35:15, Ethernet0/0

5. C 10.1.1.0 is directly connected, Ethernet0/0

6. O 10.1.4.0 [110/20] via 10.1.1.1, 00:35:15, Ethernet0/0

7. C 10.1.30.0 is directly connected, Ethernet0/0

8. C 10.1.20.0 is directly connected, Ethernet0/0

使用ACL,我们可以实现多个网段的匹配。但是在工作环境中,仅仅为了查看路由表就在客户的机器上添加ACL也不太好,万一看完忘记删,或者改写了已有的ACL,也是一件很麻烦的事情。

终极方法:正则表达式

正则表达式可以说是字符匹配的终极工具,思科的管道符“|”命令也支持正则表达式。下面将介绍如何使用正则表达式来匹配路由条目。

1. 10.0.0.0/24 is subnetted, 11 subnets

2. O 10.1.3.0 [110/20] via 10.1.1.1, 00:42:53, Ethernet0/0

3. O 10.2.1.0 [110/20] via 10.1.1.1, 00:42:53, Ethernet0/0

4. O 10.1.2.0 [110/20] via 10.1.1.1, 00:42:53, Ethernet0/0

5. O 10.2.2.0 [110/20] via 10.1.1.1, 00:42:53, Ethernet0/0

6. C 10.1.1.0 is directly connected, Ethernet0/0

7. O 10.3.2.0 [110/20] via 10.1.1.1, 00:42:53, Ethernet0/0

8. O 10.2.3.0 [110/20] via 10.1.1.1, 00:42:53, Ethernet0/0

9. O 10.4.2.0 [110/20] via 10.1.1.1, 00:42:53, Ethernet0/0

10. O 10.1.4.0 [110/20] via 10.1.1.1, 00:42:55, Ethernet0/0

11. C 10.1.30.0 is directly connected, Ethernet0/0

12. C 10.1.20.0 is directly connected, Ethernet0/0

13. O 192.168.1.0/24 [110/20] via 10.1.1.1, 00:42:55, Ethernet0/0

14. C 192.168.2.0/24 is directly connected, Ethernet0/0

仔细观察这张路由表,我们发现所有路由条目之前都至少有两个空格,我们就利用这个特点进行匹配。在正则表达式中我们可以利用“_”来匹配空格。

例如,匹配10.1网段,我们可以使用如下命令:show ip route | i __10.1.

1. R2#sh ip route | i __10.1.

2. O 10.1.3.0 [110/20] via 10.1.1.1, 00:46:29, Ethernet0/0

3. O 10.1.2.0 [110/20] via 10.1.1.1, 00:46:29, Ethernet0/0

4. C 10.1.1.0 is directly connected, Ethernet0/0

5. O 10.1.4.0 [110/20] via 10.1.1.1, 00:46:29, Ethernet0/0

6. C 10.1.30.0 is directly connected, Ethernet0/0

7. C 10.1.20.0 is directly connected, Ethernet0/0

由于“.”在正则表达式中是有特殊含义的(代表任意单个字符),我们必须用转义符“”,让系统认为这是一个普通字符,否则会导致匹配不精确。

我们还可以利用正则表达式实现多个网段的匹配,例如同时匹配10.1和10.2网段:show ip route

| i __10.(1|2).

1. R2#sh ip route | i __10.(1|2).

2. O 10.1.3.0 [110/20] via 10.1.1.1, 00:01:02, Ethernet0/0

3. O 10.2.1.0 [110/20] via 10.1.1.1, 00:01:02, Ethernet0/0

4. O 10.1.2.0 [110/20] via 10.1.1.1, 00:01:02, Ethernet0/0

5. O 10.2.2.0 [110/20] via 10.1.1.1, 00:01:02, Ethernet0/0

6. C 10.1.1.0 is directly connected, Ethernet0/0

7. O 10.2.3.0 [110/20] via 10.1.1.1, 00:01:02, Ethernet0/0

8. O 10.1.4.0 [110/20] via 10.1.1.1, 00:01:02, Ethernet0/0

9. C 10.1.30.0 is directly connected, Ethernet0/0

10. C 10.1.20.0 is directly connected, Ethernet0/0

以上只是正则表达式的一些简单应用,本人也只是正则表达式的初学者,要更加系统地了解cisco的正则表达式书写方法,请参阅:/en/US/docs/ios/12_2/termserv/configuration/guide/tcfaapre_ps1835_TSD_Products_Configuration_Guide_

当然,正则表达式也是有局限性的(例如根据掩码长度匹配较难)。


本文标签: 匹配 路由 网段 条目 例如