You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scapy中正确配置BGP AS_PATH属性构造合法Update报文

故障原因

你构造的AS_PATH属性触发Wireshark畸形告警,核心是字段赋值不符合RFC 4271的BGP协议规范:attribute字段传入None,没有填充合法的AS路径结构,同时type_flags、type_code、attr_len的传值方式也不符合要求。

AS_PATH属性的合法构造规则

AS_PATH是公认必遵传递属性,构造时必须严格遵循以下结构:

  • type_flags:不能仅传字符串"Transitive"。常规场景下(属性内容长度≤255字节)值为0x40(二进制01000000,仅Transitive标志位置1);如果属性内容长度超过255字节,需要开启扩展长度位,值为0x50。
  • type_code:AS_PATH对应的固定类型码为2,不要传入字符串值。
  • attr_len:不能设为None,需要填写后续attribute字段的实际字节长度。
  • attribute:禁止传None,必须按AS路径段结构逐字节填充,每个路径段的结构为:
    • 1字节段类型:常用值为2(AS_SEQUENCE,有序AS路径序列)、1(AS_SET,无序AS集合)
    • 1字节段内AS计数:标记当前段包含的AS号数量
    • AS号列表:每个AS号占4字节(适配当前主流的4字节AS规范,即RFC 6793;旧2字节AS环境每个AS号占2字节,需和BGP会话协商的AS能力保持一致),所有整数值均按大端序编码。
修正代码示例(基于Scapy框架)

以下示例构造AS_PATH为AS_SEQUENCE类型,包含65001、65002两个私有AS号的合法属性:

# 组装AS_PATH属性载荷
as_path_content = b"\x02"  # 段类型为AS_SEQUENCE
as_path_content += b"\x02" # 段内包含2个AS号
as_path_content += (65001).to_bytes(4, byteorder="big")
as_path_content += (65002).to_bytes(4, byteorder="big")

setAS = BGPPathAttr(
    type_flags=0x40,
    type_code=2,
    attr_len=len(as_path_content),
    attribute=as_path_content
)
校验提示
  • 如果是2字节AS的老旧组网环境,AS号转2字节大端整数即可,attr_len同步按实际长度计算。
  • 开启扩展长度位(type_flags=0x50)时,长度字段会自动占2字节,Scapy框架会根据type_flags自动适配长度字段的编码宽度,无需手动处理。
  • 报文构造完成后可先调用.show()方法核对各字段的字节值,确认结构正确后再发送,Wireshark即可正常解析。

内容的提问来源于stack exchange,提问作者Luiz Buzza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:27:17