目录

一、正则表达式元字符特殊字符

二、字符组合路由含义:

三、实列理解:

四、应用:

(1)应用——过滤:

(2)应用——选路:


使用 正则表达式目的:匹配BGP路由,进行选路和过滤和执行其他操作

一、正则表达式元字符特殊字符


元字符特殊字符


匹配内容


              .


任何单一字符,包括空格


             [ ]


在方括弧中罗列的任何字符


             [^100]


除了在方括弧中罗列的字符外任何字符(^必须放置在字符列表之前)(除了AS 100)


               -


(连字符)在由连字符所分隔的两个字符之间的任意字符


              ?


字符或模式出现0次或1


              *


字符或模式出现0次或多次


              +


字符或模式出现1次或多次


              ^


一行的开始


              $


一行的结束


               |


或者


              _


(下划线)相当于逗号

—————————————————————————————————————————————————————— 

二、字符组合路由含义:

  • ^$            从本地as起源的路由

^2_          所有从直接相连的位于as 2的邻居来的路由, 始发于AS 2
_3_          经过as 3

.*             所有BGP路由

^2$          源于as2中的邻居路由
 

_300$     匹配最后一个AS 时as 300的

^12.        匹配12以及 120~129的BGP路由

————————————————————————————————————————————————————

三、实列理解:

  •   2、描述:匹配行的起始和结束

考虑下面的AP_PATH过滤器:
(1)ip as-path access-list 20 permit 850

 含义:凡是AS号码里面有850的路由都能匹配出来
该匹配任何包含字符串850AS_PATH。匹配的AS_PATH例如:(850),(235850155)和(35685850310)等。无论是是属性中唯一的串或者属性中多个AS号中的一个甚至是属性中一个很大的AS号中的一部分,该匹配都成功。

 
假设你只想匹配包含唯一AS850AS_PATH,你必须描述行的开始和结束。使用补字号(^)匹配行的开始,美元符($)匹配行的结束:
(2)ip as-path access-list 20 permit ^850$

 含义:只匹配 AS 850
这样表示表达式的开始紧接一个字符串850,然后紧接行的结束符。
你还可以使用两个描述来匹配一个空的AS_PATH
(3)ip as-path access-list 21 permit ^$

 含义:匹配本地AS产生的路由
在上述情况,正则表达式匹配行的开始紧接行的结束;如果行的开始与行的结束间存在任何字符则匹配不成功。

3、括弧:匹配字符集和

括弧是你能指定单字符的范围。
(1)ip as-path access-list 22 permit ^85[0123459]$

含义:匹配包含单一AS号850,851,852,853,854,855或859的AS_PATH。
上述过滤器匹配包含单一AS850851852853854855859AS_PATH
如果字符的范围连续,你可以只指定序列中开始和结束的字符:
(2)ip as-path access-list 22 permit ^85[0-5]$

含义:匹配AS号为850~855的路由


4、否定:匹配除字符集和外的其他字符

当在括弧中使用加字符时,将否定括弧中指定的范围。如果是正则表达式将匹配范围外的任何内容。例如:
(1)ip as-path access-list 24 permit ^85[^0-5]$

含义:匹配AS以85开头的路由,排除AS号为850~855,其他的都可以匹配(856 857 858 859)
该过滤器除了多一个加字符以外与上一个过滤器类似,指定了不是0~5”。该正则表达式将匹配856~859范围内的单个AS号。

5、通配符:匹配任何单一字符

点(.)匹配任何单一字符。单一字符可能是一个空的。考虑下面过滤器:
ip as-path access-list 24 permit ^85.
含义:该过滤器匹配一个由AS850~859开始的AS-PATH。由于“.”可以匹配一个空格,AS85也能匹配成功。


6、替代:匹配字符串集合中的一个

|)用作表示一个操作。即(|)任何一边的字都可以匹配。例如:
ip as-path access-list 25 permit ^(851|852)$
含义:该过滤器匹配单个AS号:851或852的AS_PATH。

你可以扩展功能来作多于两个可能性的选择:
ip as-path access-list 26 permit ^(851|852|6341|53)$


7、选择字符:匹配一个可能存在也可能不存在的字符

问号(?)匹配字的0个或一个实例。例如
ip as-path access-list 27 permit ^(850)?$

含义:匹配AS-path里面,没有包含850或者只包含一个850的BGP路由
该过滤器匹配一个单一AS850AS_PATH或者匹配一个空的列表。注意这里的圆括弧,表示元字符“?”应用在整个AS号上。

ip as-path access-list 27 permit ^850?$

含义:如果表达式使用850?,元字符特殊字符只应用在最后一个字符上(0)。该表达式匹配85或者850。

8、重复:匹配许多字符的重复

你可以使用两个元字符特殊字符来匹配重复的词:星号(*)匹配0次或多次重复,加号(+)匹配1次或多次重复。例如
ip as-path access-list 28 permit ^(850)*$
含义:该过滤器匹配空的AS列表或包含0个或多个的AS号为850的。即AS路径可以是(850850),(850850850)等。

 ip as-path access-list 29 permit ^(850)+$
含义:下面的过滤器功能类似,只是要求列表中至少包含1 AS850


9、分界线:描述多个字

分界线(_)用作描述分隔分别指定的一串字。例如假设你想匹配指定的AS_PATH(561014828413)。过滤器可以如下所示:


ip as-path access-list 30 permit ^5610_148_284_13$

含义:必须第一个是5610—148—284—13,严格按照顺序匹配,因为有^行的开始与结束符号

过滤器指定了行的开始与结束,只有AS_PATH561014828413)才能匹配。
下划线匹配行的开始、行的结束、逗号或空格。注意下面过滤器与上述过滤器的区别:


ip as-path access-list 31 permit -5610_148_284_13_

含义: 一个AS列表只要包含这几个即可,顺序没有关系
在第二个过滤器中,只要求指定的序列包含在AS_PATH中,并不要求是唯一的属性。所以AS_PATH(561014828413)AS_PATH(2315561014828413) AS_PATH(5610148284133005)等都能匹配。

10、放到一起:一个复杂的例子

将多个元字符特殊字符混合是用来匹配一些复杂的字符串才能显示正则表达的真正威力。考虑下面的过滤器:
ip as-path access-list 10 permit ^(550)+[880|2304]?_1805_.*

—————————————————————————————————————————————————————— 

四、应用:

(1)应用——过滤:

Ip as-path access-list 1 deny  _300_
Ip as-path access-list 1 per .*
Router bgp 200
Nei 3.3.3.3 filter-list 1 out

实现功能:3.3.3.3发送通告路由时候过滤掉经过AS 300的路由

(2)应用——选路:

Ip as-path access-lsit 1 per ^65530$
Route-map aaa per 10
  Match as-path 1
  Set metric 100

Route bgp 100
Aggregate-add 172.16.0.0 255.255.0.0 as-set  advertise-map aaa
匹配172.16.0.0 BGP路由中具有AS 65530的给予聚合,聚合后的路由MED值为100

实现功能:匹配172.16.0.0 BGP路由中具有AS 65530的给予聚合,聚合后的路由MED值为100

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐