我正在尝试解析下载的BGP跟踪这里。据说,BGP数据包跟踪存储在具有前缀更新的文件中,这些MRT格式文件可以被PyBGPdump读取。
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'但是,我得到了以下错误:
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“,找到了这里。结果很好:
(999, 'BGP messages in the MRT dump')这里发生了什么?所有的跟踪文件都是不可读的,我也不知道如何解析我找到的存储库中的文件。
非常感谢!
发布于 2019-08-26 13:04:34
这是dpkt库中的一个错误。官方存储库中有一个公开发行,但它是从2015年开始的。问题是BGP更新解析器将AS路径中的AS数字作为数字处理,尽管它们被编码为4八进制/字节的数字。因此,当它到达以长度为2的路径编码的4字节的开头时
\x00\x00\xab\xcd \x00\x00\x12\x34它将尝试读取两个2字节的数字,然后停止。因此,它不是43981 4660,而是读取0 43981并错误地解释重定向字节。
目前还没有快速修复,因为问题是相当棘手的。为了了解AS路径是如何编码的,必须查看BGP开放消息中协商的功能。不确定其他解析器如何处理这个问题。
您可以在回购中解决这个问题,或者尝试另一个库(如姆特帕斯 )。
https://stackoverflow.com/questions/56213627
复制相似问题