BGP协议概况及数据包分析
BGP详细介绍
BGP概述
BGP(BorderGatewayProtocol)边界网关协议,是互联网上一个核心的互联网去中心化自治路由协议。
- 英文名称:Border Gateway Protocol
- 中文名称: 边界网关协议
- 缩写名称: bgp
- 传输层协议: tcp
- 服务端口 : 179
BGP理解
如果把广域网抽象成一个城市,其中包含的城域网抽象成城市中的小区,通过接下来的描述,大致就能了解BGP的功能了:
- 小区中的每栋楼象征着一个个的局域网,他们之间的路由信息由小区物业统一管理,我们要去某栋楼,只需要查物业的路由表就行了;
- 现在在这个小区的旁边又建了个新小区,新小区内部结构同上一个相同,这样两个小区内部相互访问没什么问题;
- 接下来问题来了,两个小区之间若想互相访问怎么办?答案是两个小区的物业互相分享一下本小区的路由表,互相都看一下就可以了;
- 随着越来越多的新小区建立,互相分享路由表,这个过程就是BGP协议的工作原理。
BGP的三个表
- 路由表:存放本网络中的路由信息表;
- 邻居表:保存所有BGP邻居的信息;
- BGP表:保存从每个邻居学到的路由信息。
BGP报文
- Open报文:用于建立BGP对等体连接。
- Update报文:用于在对等体之间交换路由信息。
- Notification报文:用于中断BGP连接。
- Keepalive报文:用于保持BGP连接。
- Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
BGP扫描
请求包
经测试,无论发什么请求包都可以得到BGP服务器的响应包,而且响应信息可以解析。
shodan发的包如下:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x1d\x01\x04\x4b\xb8\x00\xb4\xd8\x75\x02\xb4\x00
响应包
目前得到的响应包有如下三种类别:
- 只有OPEN报文
- 只有NOTIFICATION报文
- 有OPEN和NOTIFICATION两种报文
BGP识别
得到BGP服务器的响应信息之后发现,BGP协议的响应报文中有Maker位,即“ffffffffffffffffffffffffffffffff”,可以通过以下识别相应信息中是否以此开头,对BGP协议进行识别。
BGP解析
在识别位后第三个十六进制数表示的是此响应的类型,对照关系如下:
十六进制数 | 响应类型 |
---|---|
01 | OPEN |
02 | UPDATE |
03 | NOTIFICATION |
04 | KEEPALIVE |
05 | ROUTE_REFRESH |
06 | CAPABILIT |
通过判断响应类型确定解析函数(不同响应类型的解析有差异,目前只解析了OPEN类型和NOTIFICATION类型)
OPEN类型解析
以下位数表示以标志位结束位开始进行计数
- 第1、2位表示响应信息长度
- 第3位表示相应类型
- 第4位表示BGP协议版本
- 第5、6位表示自治系统编号(小区唯一标志)
- 第7、8位表示连接时间
- 第9、10、11、12位表示BGP识别码
NOTIFICATION类型解析
以下位数表示以标志位结束位开始进行计数
- 第1、2位表示响应信息长度
- 第3位表示响应类型
- 第4位表示主要错误识别代码
- 第5位表示辅助错误识别代码
主要错误识别码对应关系:
识别码 | 错误类型 |
---|---|
01 | MSG_HDR |
02 | OPEN_MSG |
03 | UPDATE_MSG |
04 | HT_EXPIRED |
05 | STATE_MACHINE |
06 | CEASE |
07 | CAP_MSG |
辅助错误识别码对应关系:
识别码 | 错误类型 |
---|---|
01 | Maximum Number of Prefixes Reached |
02 | Administratively Shutdown |
03 | Peer De-configured |
04 | Administratively Reset |
05 | Connection Rejected |
06 | Other Configuration Change |
07 | Connection Collision Resolution |
08 | Out of Resources |
09 | Hard Reset |
00 | NULL |