首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BGP MRT格式解析

BGP MRT格式解析
EN

Stack Overflow用户
提问于 2019-05-20 02:19:46
回答 1查看 675关注 0票数 0

我正在尝试解析下载的BGP跟踪这里。据说,BGP数据包跟踪存储在具有前缀更新的文件中,这些MRT格式文件可以被PyBGPdump读取。

我下载了一个文件并遵循了说明 (或这个格式更好的):

代码语言:javascript
复制
cnt = 0
dump = pybgpdump.BGPDump('sample.dump.gz')
for mrt_h, bgp_h, bgp_m in dump:
    cnt += 1
print cnt, 'BGP messages in the MRT dump'

但是,我得到了以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "bgp-stats.py", line 8, in <module>
    for mrt_h, bgp_h, bgp_m in dump:
  File "/usr/local/lib/python2.7/dist-packages/pybgpdump.py", line 61, in next
    bgp_m = dpkt.bgp.BGP(bgp_h.data)
  File "/usr/local/lib/python2.7/dist-packages/dpkt/dpkt.py", line 89, in __init__
    self.unpack(args[0])
  File "/usr/local/lib/python2.7/dist-packages/dpkt/bgp.py", line 152, in unpack
    self.data = self.update = self.Update(self.data)
  File "/usr/local/lib/python2.7/dist-packages/dpkt/dpkt.py", line 89, in __init__
    self.unpack(args[0])
  File "/usr/local/lib/python2.7/dist-packages/dpkt/bgp.py", line 247, in unpack
    attr = self.Attribute(self.data)
  File "/usr/local/lib/python2.7/dist-packages/dpkt/dpkt.py", line 89, in __init__
    self.unpack(args[0])
  File "/usr/local/lib/python2.7/dist-packages/dpkt/bgp.py", line 326, in unpack
    self.data = self.as_path = self.ASPath(self.data)
  File "/usr/local/lib/python2.7/dist-packages/dpkt/dpkt.py", line 89, in __init__
    self.unpack(args[0])
  File "/usr/local/lib/python2.7/dist-packages/dpkt/bgp.py", line 376, in unpack
    seg = self.ASPathSegment(self.data)
  File "/usr/local/lib/python2.7/dist-packages/dpkt/dpkt.py", line 94, in __init__
    (self.__class__.__name__, args[0]))
dpkt.dpkt.UnpackError: invalid ASPathSegment: '\x1d\xf6\x00\x00\x1d\xf6\x00\x00\x1d\xf6\x00\x00F\xe0'

这似乎是一个格式问题。我搜索了"sample.dump.gz“,找到了这里。结果很好:

代码语言:javascript
复制
(999, 'BGP messages in the MRT dump')

这里发生了什么?所有的跟踪文件都是不可读的,我也不知道如何解析我找到的存储库中的文件。

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-26 13:04:34

这是dpkt库中的一个错误。官方存储库中有一个公开发行,但它是从2015年开始的。问题是BGP更新解析器将AS路径中的AS数字作为数字处理,尽管它们被编码为4八进制/字节的数字。因此,当它到达以长度为2的路径编码的4字节的开头时

代码语言:javascript
复制
\x00\x00\xab\xcd   \x00\x00\x12\x34

它将尝试读取两个2字节的数字,然后停止。因此,它不是43981 4660,而是读取0 43981并错误地解释重定向字节。

目前还没有快速修复,因为问题是相当棘手的。为了了解AS路径是如何编码的,必须查看BGP开放消息中协商的功能。不确定其他解析器如何处理这个问题。

您可以在回购中解决这个问题,或者尝试另一个库(如姆特帕斯 )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56213627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档