当前位置:首页>python>Python Scapy解析OSPF Hello包关键字段

Python Scapy解析OSPF Hello包关键字段

  • 2026-09-10 10:47:03
Python Scapy解析OSPF Hello包关键字段

前阵子一个园区网OSPF一直起不来,邻居状态卡在Init。我第一反应是手动抓包看一下,后来写了个脚本用Scapy批量解析Hello包,效率高出不少。

OSPF Hello包里几个关键字段必须一致才能建立邻居:Hello Interval、Dead Interval、Router ID、Area ID,还有认证类型和密码。手工比对多台设备太慢,用Scapy读pcap直接解析。

from scapy.all import rdpcap, OSPF_Hellopkts = rdpcap(”ospf_hello.pcap”)for p in pkts: if OSPF_Hello in p: h = p[OSPF_Hello] print(h.hellointerval, h.deadinterval, h.routerid, h.area)

实际用下来,rdpcap加载大文件有点慢,可以用sniff实时抓。hellointerval和deadinterval不一致是最常见的坑,有些厂商默认Dead是Hello的4倍,改了一边忘了另一边,邻居永远起不来。

认证那块,OSPF Header里的authtype字段值为0是无认证,1是明文,2是MD5。如果authtype=2但密码配错,抓包看到的是authdata里一串乱码,这时候用Scapy把每个包的authdata打印出来比对,能快速确认是不是密码不一致。

我有一次遇到的事故是两台设备配了不同Area——一台配了Area 1,另一台配了Area 0.0.0.10(Area 10在点分十进制下是0.0.0.10,很容易和0.0.0.1搞混)。OSPF不报错,只是邻居起不来,根本原因从display信息里看不出来。用脚本把全网设备的Hello包都抓出来解析,花了10分钟定位到两台设备Area不一致,才反应过来是点分十进制和十进制混着用导致的配置错误。

批量检查的话,把各台设备的Hello包分别存成pcap,写个循环逐个解析,把字段值存入字典,最后打印哪些设备参数不一致。比登每台设备show ip ospf interface快多了,尤其是设备数量超过20台的时候。

OSPF Hello包各字段的检查要点和默认值也列一下,排查时对照:

字段
默认值
不一致后果
Scapy属性
HelloInterval
10秒(广播/P2P),30秒(NBMA)
邻居卡在Init
h.hellointerval
DeadInterval
4×Hello Interval
邻居反复建立/断开
h.deadinterval
Area ID
取决于配置
邻居卡在Init
h.area
Router ID
自动选举或手动指定
冲突时邻居起不来
h.routerid
AuthType
0=无认证
认证失败→邻居反复震荡
p[OSPF_Hdr].authtype

最新文章

随机文章